当前位置: 首页 > news >正文

JavaWeb:上传文件

1.建普通maven项目,或者maven项目,这里以普通maven为例,区别的jar包的导入方式啦

到中央仓库下载哦

2.结构

3.写fileservlet


public class FileServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//判断上传的文件是普通的表单还是带文件的表单(以表单方式提交)if(!ServletFileUpload.isMultipartContent(req)){return;//普通表单,终止方法运行}//创建文件上传后的保存路径String uploadPath=this.getServletContext().getRealPath("/WEB-INF/upload");File uploadFile=new File(uploadPath);if(!uploadFile.exists()){uploadFile.mkdir();//不存在,就创建这个目录}//缓存,临时文件放置String tmpPath=this.getServletContext().getRealPath("/WEB-INF/tmp");File file=new File(tmpPath);if(!file.exists()){file.mkdir();//不存在,就创建这个目录(临时)}//处理上传的文件,一般通过流获取try{//创建DiskFileItemFactory对象,处理文件上传限制 大小 路径DiskFileItemFactory factory=getDiskFileItemFactory(file);//获取ServletFileUploadServletFileUpload upload=getServletFileUpload(factory);//处理上传的文件String msg=uploadParseRequest(upload,req,uploadPath);//servlet请求转发req.setAttribute("msg",msg);req.getRequestDispatcher("info.jsp").forward(req,resp);} catch (Exception e) {e.printStackTrace();}}private static String uploadParseRequest(ServletFileUpload upload, HttpServletRequest req, String uploadPath) throws FileUploadException, IOException {String msg="";List<FileItem>fileItems=upload.parseRequest(req);for(FileItem fileItem:fileItems){if(fileItem.isFormField()){String name=fileItem.getFieldName();String value=fileItem.getString("UTF-8");System.out.println(name+":"+value);}else {String uploadFileName=fileItem.getName();System.out.println("文件:"+uploadFileName);if(uploadFileName.trim().equals("")||uploadFileName==null){continue;}//获取文件名(/),和后缀名(.)  /img.pngString fileName=uploadFileName.substring(uploadFileName.lastIndexOf("/")+1);String fileExtName=uploadFileName.substring(uploadFileName.lastIndexOf(".")+1);System.out.println("文件消息:"+fileName+"类型"+fileExtName);//UUID 保证文件名唯一//UUID.randomUUID()随机生成一个通用码String uuidPath= UUID.randomUUID().toString();String realPath=uploadPath+"/"+uuidPath;File realPathFile=new File(realPath);if(!realPathFile.exists()){realPathFile.mkdir();}//获取上传文件的流InputStream inputStream=fileItem.getInputStream();FileOutputStream fos=new FileOutputStream(realPath+"/"+fileName);//缓冲区byte[]buffer=new byte[1024*1024];//判断读取完成?int len=0;while ((len=inputStream.read(buffer))>0){fos.write(buffer,0,len);}fos.close();inputStream.close();msg="success";fileItem.delete();}}return msg;}private static ServletFileUpload getServletFileUpload(DiskFileItemFactory factory) {ServletFileUpload upload=new ServletFileUpload(factory);//监听文件上传速度upload.setProgressListener(new ProgressListener() {@Overridepublic void update(long l, long l1, int i) {System.out.println("总大小:"+l1+"已上传"+l);}});upload.setHeaderEncoding("UTF-8");upload.setFileSizeMax(1024*1024*10);//1024=1kb*1024=10Mreturn upload;}private static DiskFileItemFactory getDiskFileItemFactory(File file) {DiskFileItemFactory factory=new DiskFileItemFactory();//设置缓冲区,文件大于缓冲区放到临时文件factory.setSizeThreshold(1024*1024);factory.setRepository(file);return factory;}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
}
4.index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/upload.do" enctype="multipart/form-data" method="post">上传用户:<input type="text" name="username"><br><p><input type="file" name="file1"></p><p><input type="file" name="file1"></p><p><input type="submit">||<input type="reset"></p>
</form>
</body>
</html>

5.info

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%--上传文件大小有限制:get--%>
${msg}
</body>
</html>

http://www.lryc.cn/news/184787.html

相关文章:

  • STM32 大小端与字节对齐使用记录
  • RabbitMQ中basic**方法汇总与参数解释
  • linux之/etc/default/useradd文件
  • 3.primitive主数据类型和引用 认识变量
  • 【群智能算法改进】一种改进的光学显微镜算法 IOMA算法[1]【Matlab代码#60】
  • 第三课-软件升级-Stable Diffusion教程
  • 【C++】设计模式之——建造者
  • 【C++】基础语句(学习笔记)
  • 大厂秋招真题【DP】米哈游20230924秋招T2-米小游与魔法少女-奇运
  • LVS+Keepalived 高可用集群负载均衡
  • Qt QList类和QLinkedList类 详解
  • Mac安装GYM遇到的一些坑
  • 【高级rabbitmq】
  • 数百个下载能够传播 Rootkit 的恶意 NPM 软件包
  • SpringBoot的error用全局异常去处理
  • MyBatisPlus(十一)包含查询:in
  • Linux命令定位与查找:which、whereis和find的用法详解
  • LeetCode 面试题 17.10. Find Majority Element LCCI【摩尔投票法】简单
  • 多校联测11 模板题
  • Linux SSH连接远程服务器(免密登录、scp和sftp传输文件)
  • 从0开始python学习-30.selenium frame子页面切换
  • asp.net core 远程调试
  • Java spring boot 一次调用多个请求
  • DRM全解析 —— CRTC详解(4)
  • 六个为Rust构建的IDE
  • 25 Python的collections模块
  • JEPG Encoder IP verilog设计及实现
  • yolov5 web端部署进行图片和视频检测
  • 嵌入式养成计划-34--函数库
  • PM864AK01-eA 3BSE018161R2 工业人工智能供应链先驱