本文实例为大家分享了JSP实现文件上传功能的具体代码,供大家参考,具体内容如下
一、准备部分
需要fileupload.jar与io.jar包共同完成。构建完成路径后可继续。
二、页面部分
1 |
注意:
1.文件上传必须要使用post,以避免用get方法时传输总量超过搜索框所能承载最大字符数。
2.必须加入enctype=”multipart.form-data”字段
3.文件处需用“file”
三、Servlet部分
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 | package webtest; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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.FileItemFactory; import org.apache.commons.fileupload.FileUploadBase; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class UploadServlet */ @WebServlet ( "/UploadServlet" ) public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding( "utf-8" ); // 请求编码处理,传输时 response.setCharacterEncoding( "utf-8" ); // 响应编码处理,传输时 response.setContentType( "utf-8" ); // 响应编码处理,显示时 boolean isMultipart = ServletFileUpload.isMultipartContent(request); // 判断是否有entype="multipart/form-data"部分 if (isMultipart) { try { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); //设置上传时的内存缓冲区大小,超出时写入临时文件 10kb ((DiskFileItemFactory) factory).setSizeThreshold( 10240 ); //单位byte //设置临时文件目录,防止系统空间不足 ((DiskFileItemFactory) factory).setRepository( new File(request.getSession().getServletContext().getRealPath( "Uploadtemp" ))); //动态获取Uploadtemp文件夹位于该项目中的位置 //控制上传单个文件的最大值 20kb upload.setSizeMax( 20480 ); //单位byte List<fileitem> items = upload.parseRequest(request); // 解析form中的所有请求字段,并保存在item中 Iterator<fileitem> iter = items.iterator(); while (iter.hasNext()) { // 解析时无顺序,因此需根据名字查找 FileItem item = iter.next(); if (item.isFormField()) { //非文件数据 String itemName = item.getFieldName(); //获取非文件的范围数据名 if (itemName.equals( "sno" )) { int sno = - 1 ; sno = Integer.parseInt(item.getString( "utf-8" )); } else if (itemName.equals( "sname" )) { String sname = null ; sname = item.getString( "utf-8" ); } else { System.out.println( "其他字段..." ); } } else { //文件上传 String fileName = item.getName(); //获取文件范围数据。路径及其名称 //判断文件类型 String ext = fileName.substring(fileName.indexOf( "." )+ 1 ); if (!(ext.equals( "png" )||ext.equals( "gif" )||ext.equals( "jpg" ))) { System.out.println( "仅支持png.gif,jpg类型文件" ); return ; } String path = request.getSession().getServletContext().getRealPath( "Upload" ); //动态获取Upload文件夹位于该项目中的位置 File file = new File(path,fileName); item.write(file); //定义上传路径,多为服务器路径 System.out.println(fileName+ "上传成功" ); } item.delete(); //删除临时目录的文件 } } catch (FileUploadBase.SizeLimitExceededException e) { System.out.println( "最大20KB" ); } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }</fileitem></fileitem> |
注:
1.若该处标红且鼠标悬停后未找到包,则可以使用”alt”+”/”组合键选择下图第一个类来导入。
2.由于若Upload与Uploadtemp文件存放于tomcat对应的项目下,每一次通过eclipse更新代码,会将eclipse下代码直接覆盖,因而两个文件夹会直接被覆盖掉。可以在eclipse中新建,或通过绝对/相对路径于其他文件夹中来设置。
3.临时文件中的数据会保留很短的时间,添加sleep让程序休眠也许可以看到。即使无item.delete(),在整个会话完成后,临时文件也会被删除。
4.若报错无法找到文件,请尝试用浏览器若谷歌进行操作,而不是用Eclipse自带的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持IT俱乐部。