servlet3.0 getPart()與getParts()獲取上傳檔案
阿新 • • 發佈:2019-02-17
需求: servlet3.0以上,就是tomcat7.0以上,web.xml->web-app->version 3.0以上, 不需要引入其它的jar包
Servlet類需要添加註釋@MultipartConfig, 必要, 否則request.getPart()會為null
@MultipartConfig public class FileServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS"); //檔案存放目錄 String mypath = this.getClass().getClassLoader().getResource("/../../").getPath() + "upload"; File file = new File(mypath ); if(!file.exists()){ file.mkdir(); } String filename = format.format(new Date()); // multipart/form-data if (ServletFileUpload.isMultipartContent(request)) { Part part = request.getPart("ff"); if(part == null){ return; } String headerfNValue = part.getHeader("content-disposition"); if("".equals(headerfNValue.trim()){ return ; } //headerfNValue = [filename="xxxx.xxx"] String valueKey = "filename=\""; int s = headerfNValue.indexOf(valueKey ); if(s < 0){ return; } String originalfilename = headerfNValue.substring(s + valueKey.length(), headerfNValue.length()-1); ; String suffix = originalfilename.substring(originalfilename.lastIndexOf(".")); if(".jpg|.jpeg|.jpe|.jfif|.png|.gif|.bmp|.dib|.tif|.tiff".indexOf(suffix) < 0){ return; } filename += suffix; InputStream input = part.getInputStream(); file = new File(mypath + filename); if(!file.exists()){ file.createNewFile(); } FileOutputStream fos = new FileOutputStream(file); int size = 0; byte[] buffer = new byte[1024]; while ((size = input.read(buffer)) != -1) { fos.write(buffer, 0, size); } fos.close(); input.close(); } } }
getParts() 就是多個Part ,for出來就可以
關於 @MultipartConfig 註釋:
@MultipartConfig(location = "/upload", maxFileSize = 1024 * 1024 * 50)
設定了location 就是檔案的儲存路徑 , 確認Part的filename不為空後,可以直接寫入, 可以省去後面的檔案流操作
......
filename += suffix;
part.write(filename);
前端頁面:
<form action="" method ="post" enctype="multipart/form-data">
<input type="file" name="ff" />
<input type="submit" value="go" />
</form>