最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JSP实现文件上传功能
时间:2025-07-06 15:55:01 编辑:袖梨 来源:一聚教程网
本文实例为大家分享了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文件夹位于该项目中的位置//控制上传单个文件的最大值 20kbupload.setSizeMax(20480);//单位byteList<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 blocke.printStackTrace(); }catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace(); }} }/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse*response)*/ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response); } }
注:
1.若该处标红且鼠标悬停后未找到包,则可以使用"alt"+"/"组合键选择下图第一个类来导入。
2.由于若Upload与Uploadtemp文件存放于tomcat对应的项目下,每一次通过eclipse更新代码,会将eclipse下代码直接覆盖,因而两个文件夹会直接被覆盖掉。可以在eclipse中新建,或通过绝对/相对路径于其他文件夹中来设置。
3.临时文件中的数据会保留很短的时间,添加sleep让程序休眠也许可以看到。即使无item.delete(),在整个会话完成后,临时文件也会被删除。
4.若报错无法找到文件,请尝试用浏览器若谷歌进行操作,而不是用Eclipse自带的。
相关文章
- 龙魂旅人阵容怎么搭配-龙魂旅人阵容搭配推荐 07-06
- 绝区零自选五星选哪个-绝区零自选五星选择攻略 07-06
- 比特币和以太坊上涨至小型代币启动_近日表现优异 07-06
- 龙魂旅人角色强度排名-龙魂旅人角色推荐 07-06
- 七日世界房子设计图有哪些-七日世界房子设计图一览 07-06
- 龙魂旅人兑换码在哪输入-龙魂旅人兑换码最新版2025 07-06