JAVAWEB文件上传
发表于|更新于
|阅读量:
对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件。这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,struts上传的功能就是基于这个实现的。common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。
<The rest of contents | 余下全文>
UploadHandleServlet的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
| package me.gacl.web.controller;
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadBase; import org.apache.commons.fileupload.ProgressListener; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadHandleServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String savePath = this.getServletContext().getRealPath("/WEB-INF/upload"); String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp"); File tmpFile = new File(tempPath); if (!tmpFile.exists()) { tmpFile.mkdir(); } String message = ""; try{ DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1024*100); factory.setRepository(tmpFile); ServletFileUpload upload = new ServletFileUpload(factory); upload.setProgressListener(new ProgressListener(){ public void update(long pBytesRead, long pContentLength, int arg2) { System.out.println("文件大小为:" + pContentLength + ",当前已处理:" + pBytesRead);
} }); upload.setHeaderEncoding("UTF-8"); if(!ServletFileUpload.isMultipartContent(request)){ return; } upload.setFileSizeMax(1024*1024); upload.setSizeMax(1024*1024*10); List<FileItem> list = upload.parseRequest(request); for(FileItem item : list){ if(item.isFormField()){ String name = item.getFieldName(); String value = item.getString("UTF-8"); System.out.println(name + "=" + value); }else{ String filename = item.getName(); System.out.println(filename); if(filename==null || filename.trim().equals("")){ continue; } filename = filename.substring(filename.lastIndexOf("\\")+1); String fileExtName = filename.substring(filename.lastIndexOf(".")+1); System.out.println("上传的文件的扩展名是:"+fileExtName); InputStream in = item.getInputStream(); String saveFilename = makeFileName(filename); String realSavePath = makePath(saveFilename, savePath); FileOutputStream out = new FileOutputStream(realSavePath + "\\" + saveFilename); byte buffer[] = new byte[1024]; int len = 0; while((len=in.read(buffer))>0){ out.write(buffer, 0, len); } in.close(); out.close(); message = "文件上传成功!"; } } }catch (FileUploadBase.FileSizeLimitExceededException e) { e.printStackTrace(); request.setAttribute("message", "单个文件超出最大值!!!"); request.getRequestDispatcher("/message.jsp").forward(request, response); return; }catch (FileUploadBase.SizeLimitExceededException e) { e.printStackTrace(); request.setAttribute("message", "上传文件的总的大小超出限制的最大值!!!"); request.getRequestDispatcher("/message.jsp").forward(request, response); return; }catch (Exception e) { message= "文件上传失败!"; e.printStackTrace(); } request.setAttribute("message",message); request.getRequestDispatcher("/message.jsp").forward(request, response); }
private String makeFileName(String filename){ return UUID.randomUUID().toString() + "_" + filename; }
private String makePath(String filename,String savePath){ int hashcode = filename.hashCode(); int dir1 = hashcode&0xf; int dir2 = (hashcode&0xf0)>>4; String dir = savePath + "\\" + dir1 + "\\" + dir2; File file = new File(dir); if(!file.exists()){ file.mkdirs(); } return dir; }
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); } }
|
upload.jsp页面的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML> <html> <head> <title>文件上传</title> </head> <body> <form action="${pageContext.request.contextPath}/servlet/UploadHandleServlet" enctype="multipart/form-data" method="post"> 上传用户:<input type="text" name="username"><br/> 上传文件1:<input type="file" name="file1"><br/> 上传文件2:<input type="file" name="file2"><br/> <input type="submit" value="提交"> </form> </body> </html>
|