这篇文章次要为大家具体介绍了JSP实现文件上传性能,文中示例代码介绍的十分具体,具备肯定的参考价值,感兴趣的小伙伴们能够参考一下
本文实例为大家分享了JSP实现文件上传性能的具体代码,供大家参考,具体内容如下
一、筹备局部
须要fileupload.jar与io.jar包共同完成。构建实现门路后可持续。
资源地址
二、页面局部
<form action="UploadServlet" method="post" enctype="multipart/form-data"> 学号:<input type="text" name="sno"/><br/> 姓名:<input type="text" name="sname"/><br/> 上传照片:<input type="file" name="spicture"/><br/> <input type="submit" value="注册"/></form>
留神:
1.文件上传必须要应用post,以防止用get办法时传输总量超过搜寻框所能承载最大字符数。
2.必须退出enctype="multipart.form-data"字段
3.文件处需用“file”
三、Servlet局部
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); } }
注:
1.若该处标红且鼠标悬停后未找到包,则能够应用"alt"+"/"组合键抉择下图第一个类来导入。
2.因为若Upload与Uploadtemp文件寄存于tomcat对应的我的项目下,每一次通过eclipse更新代码,会将eclipse下代码间接笼罩,因此两个文件夹会间接被笼罩掉。能够在eclipse中新建,或通过相对/相对路径于其余文件夹中来设置。
3.临时文件中的数据会保留很短的工夫,增加sleep让程序休眠兴许能够看到。即便无item.delete(),在整个会话实现后,临时文件也会被删除。
4.若报错无奈找到文件,请尝试用浏览器若谷歌进行操作,而不是用Eclipse自带的。
以上就是本文的全部内容,心愿对大家的学习有所帮忙,也心愿大家多多反对segmentfault。