Java实现文件上传

您所在的位置:网站首页 java文件上传功能 Java实现文件上传

Java实现文件上传

2024-07-13 15:15:54| 来源: 网络整理| 查看: 265

一. 注意事项

在Web应用中,文件上传和下载功能是非常常用的功能,对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的

【文件上传的注意事项】

为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,比如放于WEB-INF目录下 为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名 要限制上传文件的最大值 可以限制上传文件的类型,在收到上传文件名时,判断后缀名是否合法 二. 文件上传步骤 1. 下载jar包

1-1.需要jar的地址: https://mvnrepository.com/artifact/commons-io/commons-io https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload 1-2.在JavaWeb项目中导入jar包 在这里插入图片描述 1-3.【注意:使用IDEA导包需要注意修复路径,将lib添加到项目输出目录】 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

2. 编写upload.jsp

【注意:表单如果包含一个文件上传输入项的话 这个表单的enctype属性就必须设置multipart/form-data】

Title

上传用户:

上传文件:

3. 代码编写 UploadFileServlet import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.ProgressListener; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; public class ServletUpload extends javax.servlet.http.HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { //1.判断上传的文件是普通表单还是带文件的表单 if (!ServletFileUpload.isMultipartContent(req)) { return;//如果是普通文件,直接返回 }//通过if就是带文件的表单 //2.创建上传文件的保存路径,建议在WEB-INF路径下 String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload"); File uploadFile = new File(uploadPath); if (!uploadFile.exists()) { uploadFile.mkdirs();//如果保存目录不存在,就创建一个目录 } //3.创建临时路径 String tmpPath = this.getServletContext().getRealPath("/WEB-INF/tmp"); File tmpFile = new File(tmpPath); if (!tmpFile.exists()) { tmpFile.mkdirs();//如果临时目录不存在,就创建一个目录 } //4.创建DiskFileItemFactory对象,处理文件上传路径或者大小限制的; DiskFileItemFactory factory = getDiskFileItemFactory(tmpFile); //5.获取ServletFileUpload ServletFileUpload upload = getServletFileUpload(factory); //6.处理上传的文件 String msg = uploadParseRequest(upload, req, uploadPath); //7.servlet请求转发消息 req.setAttribute("msg",msg); req.getRequestDispatcher("msg.jsp").forward(req,resp); } catch (FileUploadException e) { e.printStackTrace(); } } //4.创建DiskFileItemFactory对象,处理文件上传路径或者大小限制的; public static DiskFileItemFactory getDiskFileItemFactory(File tmpFile) { DiskFileItemFactory factory = new DiskFileItemFactory(); //4-1.设置一个缓冲区,当上传文件大于这个缓冲区的时候,将它放在临时文件中 factory.setSizeThreshold(1024 * 1024); factory.setRepository(tmpFile);//4-2.临时目录的保存目录 return factory; } //5.获取ServletFileUpload public static ServletFileUpload getServletFileUpload(DiskFileItemFactory factory) { ServletFileUpload upload = new ServletFileUpload(factory); //5-1.监听文件上传进度 upload.setProgressListener(new ProgressListener() { @Override //5-2.l:已经读取到文件的大小 //5-3.l1:文件大小 public void update(long l, long l1, int i) { System.out.println("总大小:" + l1 + "\t" + "已上传:" + l); } }); upload.setHeaderEncoding("utf-8");//5-4.处理乱码问题 upload.setFileSizeMax(1024 * 1024 * 10);//5-5.设置单个文件的最大值 upload.setSizeMax(1024 * 1024 * 10);//5-6.设置总共能够上传文件的大小 return upload; } //6.处理上传的文件 public static String uploadParseRequest(ServletFileUpload upload, HttpServletRequest req, String uploadPath) throws FileUploadException, IOException { String msg = ""; //6-1.把前端请求解析,封装成一个FileItem对象 List fileItems = upload.parseRequest(req); for (FileItem fileItem : fileItems) { if (fileItem.isFormField()) {//6-2.判断上传的文件是普通的表单还是带文件的表单 String name = fileItem.getFieldName(); String value = fileItem.getString("utf-8");//6-3.处理 乱码 } else {//6-4.判断它是上传文件 //6-5.拿到文件名字 String uploadFileName = fileItem.getName(); System.out.println("上传的文件名:" + uploadFileName); if (uploadFileName.trim().equals("") || uploadFileName == null) { continue; } //6-6.获得上传文件名 String fileName = uploadFileName.substring(uploadFileName.lastIndexOf("/") + 1); //6-7.获得文件的后缀名 String fileExtName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1); System.out.println("文件信息 [文件名:" + fileName + "---文件类型" + fileExtName + "]"); //6-8.使用UUID(唯一识别的通用码),保证文件名唯一 String uuidPath = UUID.randomUUID().toString(); //6-9.文件真实存在的路径 realPath String realPath = uploadPath + "/" + uuidPath; //6-10.给每个文件创建一个对应的文件夹 File realPathFile = new File(realPath); if (!realPathFile.exists()) { realPathFile.mkdir(); } //6-11.获得文件上传的流 InputStream inputStream = fileItem.getInputStream(); //6-12.创建一个文件输出流 //6-13.realPath = 真实的文件夹; //6-14.差了一个文件; 加上输出文件的名字+"/"+uuidFileName FileOutputStream fos = new FileOutputStream(realPath + "/" + fileName); //6-15.创建一个缓冲区 byte[] buffer = new byte[1024 * 1024]; //6-16.判断是否读取完毕 int len = 0; //6-17.如果大于0说明还存在数据; while ((len = inputStream.read(buffer)) > 0) { fos.write(buffer, 0, len); } //6-18.关闭流 fos.close(); inputStream.close(); msg = "文件上传成功!"; fileItem.delete();//6-19.上传成功,清除临时文件 } } return msg; } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } } 4. 编写msg.jsp Title ${msg} 5. 配置web.xml ServletFileUpload com.sz.ServletUpload ServletFileUpload /s


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭