commons-fileupload实现文件按日期进行存储带缓存
Posted gaohuanhuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了commons-fileupload实现文件按日期进行存储带缓存相关的知识,希望对你有一定的参考价值。
JSP
1 <%-- 2 Created by IntelliJ IDEA. 3 User: Ghh 4 Date: 2019/9/1 5 Time: 14:27 6 To change this template use File | Settings | File Templates. 7 --%> 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 9 <html> 10 <head> 11 <title>文件上传</title> 12 </head> 13 <body> 14 <form action="$pageContext.request.contextPath/uploadServlet" method="post" enctype="multipart/form-data"> 15 <input type="file" name="image" id="image"><br> 16 <input type="submit" value="上传"> 17 </form> 18 </body> 19 </html>
Servlet
package com.ghh.upload; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; 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 java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; import java.util.List; import java.util.UUID; /** * @author Ghh * @date 2019/9/1 14:32 * @Description */ @WebServlet(name = "UploadServlet",urlPatterns = "/uploadServlet") public class UploadServlet extends HttpServlet protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doGet(request,response); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException InputStream is = null; FileOutputStream fileOutputStream = null; boolean isMultipart = ServletFileUpload.isMultipartContent(request); if(!isMultipart) throw new RuntimeException("该请求不支持文件上传"); DiskFileItemFactory itemFactory = new DiskFileItemFactory(); //设置上传文件大于3M会启动临时文件目录 itemFactory.setSizeThreshold(1024*1024*3); //指定临时文件存储目录 String tempPath = this.getServletContext().getRealPath("/temp"); System.out.println("tempPath = " + tempPath); File temp = new File(tempPath); if(!temp.exists()) temp.mkdirs(); itemFactory.setRepository(temp); ServletFileUpload servletFileUpload = new ServletFileUpload(itemFactory); try List<FileItem> fileItems = servletFileUpload.parseRequest(request); for (FileItem fileItem : fileItems) if(fileItem.isFormField()) //普通字段 String fieldName = fileItem.getFieldName(); String fileValue = fileItem.getString("UTF-8"); System.out.println(fieldName+"===="+fileValue); else String fileName = fileItem.getName(); String suffer = fileName.substring(fileName.lastIndexOf(".")); UUID uuid = UUID.randomUUID(); fileName = uuid+suffer; System.out.println("fileName = " + fileName); //获取输入流 is = fileItem.getInputStream(); //创建输出流 String path = this.getServletContext().getRealPath("/upload"); //根据年月日创建多级目录 LocalDate now = LocalDate.now(); int year = now.getYear(); int month = now.getMonthValue(); int day = now.getDayOfMonth(); path = path+File.separator+year+File.separator+month+File.separator+day; System.out.println("path = " + path); //创建父目录 File parentDir = new File(path); if(!parentDir.exists()) parentDir.mkdirs(); File file = new File(path,fileName); fileOutputStream = new FileOutputStream(file); byte[] bytes = new byte[1024]; int len = -1; while ((len = is.read(bytes))!=-1) fileOutputStream.write(bytes,0,len); fileItem.delete(); catch (FileUploadException e) e.printStackTrace(); finally try is.close(); fileOutputStream.close(); catch (Exception e) e.printStackTrace();
以上是关于commons-fileupload实现文件按日期进行存储带缓存的主要内容,如果未能解决你的问题,请参考以下文章
Java使用Commons-FileUpload组件实现文件上传最佳方案
利用 Commons-Fileupload 实现文件上传分析(转)