【Servlet3.0新特性】第03节_文件上传
生活随笔
收集整理的這篇文章主要介紹了
【Servlet3.0新特性】第03节_文件上传
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這是一個(gè)Web Project
?
首先是web.xml
?
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><!-- Servlet3.0需要Tomcat7和JavaEE6,配置方法詳見 --><!-- http://blog.csdn.net/jadyer/article/details/9164655 --><!-- http://blog.csdn.net/jadyer/article/details/9164737 --><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list> </web-app>?
下面是表單輸入頁(yè)index.jsp
?
<%@ page language="java" pageEncoding="UTF-8"%> <form action="<%=request.getContextPath()%>/upload" method="POST" enctype="multipart/form-data"><input name="uploadFile" type="file"><br/><input type="submit"> <form>
最后是用于處理文件上傳的HelloServlet.java
?
?
package com.jadyer.servlet;import java.io.File; import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part;/*** Servlet3.0新特性之便利的文件上傳* @see ------------------------------------------------------------------------------------------------------------------* @see 注意要使用@MultipartConfig注解標(biāo)明此Servlet支持文件上傳* @see 否則獲取到的javax.servlet.http.Part就是空的,Part.getXxx()就會(huì)報(bào)告NullPointerException* @see ------------------------------------------------------------------------------------------------------------------* @see 關(guān)于@MultipartConfig的幾個(gè)屬性* @see location--->指定存儲(chǔ)所上傳文件的目錄....分以下兩種情況* @see 1)若part.write(fileName)傳的參數(shù)只有上傳的文件名,那么最后文件就會(huì)被上傳到location目錄中* @see 若此時(shí)location所指定的目錄不存在,則會(huì)報(bào)告下面的異常(Tomcat7.x啟動(dòng)時(shí)不會(huì)報(bào))* @see java.io.IOException: The temporary upload location [D:\\upload\22] is not valid* @see 2)若part.write(savePath+"/"+fileName),則無論location是否指定目錄,最后文件都會(huì)被上傳到savePath* @see 但是,如果此時(shí)location所指定的目錄不存在,那么也會(huì)報(bào)告第一種情況中的異常,并導(dǎo)致上傳文件失敗* @see 總結(jié):API說location是儲(chǔ)存文件的目錄,但根據(jù)上面兩種情況,我感覺location指的是臨時(shí)文件目錄,故不推薦使用* @see 總結(jié):隨后我又查看了Oracle官方文檔,發(fā)現(xiàn)該屬性指的就是臨時(shí)文件目錄* @see 總結(jié):其官方文檔的地址為http://docs.oracle.com/javaee/6/tutorial/doc/gmhal.html* @see fileSizeThreshold-->設(shè)置閾值,達(dá)到閾值后會(huì)將所上傳的文件從臨時(shí)目錄中寫到磁盤..單位為byte,默認(rèn)值是0* @see maxFileSize-------->允許上傳的單個(gè)文件最大值,即不限制文件總數(shù)及總大小,只限制單個(gè)文件..單位為byte,默認(rèn)值是-1,即無限制* @see maxRequestSize----->允許上傳的文件的最大值,這里指的是一次性上傳的所有文件的合計(jì)大小..單位也是byte,默認(rèn)值是-1,即無限制* @see ------------------------------------------------------------------------------------------------------------------* @create Jun 24, 2013 3:19:12 PM* @author 玄玉<http://blog.csdn.net/jadyer>*/ @WebServlet(urlPatterns="/upload") @MultipartConfig(fileSizeThreshold=1024*1024*2, maxFileSize=1024*1024*20, maxRequestSize=1024*1024*200) public class HelloServlet extends HttpServlet {private static final long serialVersionUID = -1812698941752545746L;@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解決上傳文件的中文亂碼問題req.setCharacterEncoding("UTF-8");//解決應(yīng)答給瀏覽器的中文亂碼問題resp.setCharacterEncoding("UTF-8");//回顯上傳結(jié)果給瀏覽器String uploadResult = null;PrintWriter out = resp.getWriter();resp.setContentType("text/html; charset=UTF-8");try{//獲取上傳的文件的Part,下面的操作都是以這個(gè)Part為中心的Part part = req.getPart("uploadFile");//本例中它的值是form-data; name="uploadFile"; filename="玄玉.png"String _str = part.getHeader("content-disposition");//獲取上傳的文件真實(shí)名字(含后綴)String fileName = _str.substring(_str.lastIndexOf("=")+2, _str.lastIndexOf("\""));//指定上傳的文件的存儲(chǔ)目錄并確保其存在String savePath = "D:/upload/";File savePathFolder = new File(savePath);if(!savePathFolder.exists()){savePathFolder.mkdirs();}//上傳文件(寫入磁盤)part.write(savePath + "/" + fileName);uploadResult = "上傳完畢<br/>上傳的文件Part=" + part.getName() + "<br/>上傳的文件名稱=" + fileName+ "<br/>上傳的文件大小=" + part.getSize() + "<br/>上傳的文件類型=" + part.getContentType();}catch(IllegalStateException ise){uploadResult = "上傳失敗,失敗原因如下<br/>" + ise.getMessage();}out.print(uploadResult);out.flush();out.close();} }轉(zhuǎn)載于:https://www.cnblogs.com/jiangu66/p/3155559.html
總結(jié)
以上是生活随笔為你收集整理的【Servlet3.0新特性】第03节_文件上传的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ffmpeg利用libav库把yuv视频
- 下一篇: js基础练习---图片无缝左右滚动效果(