@MutipartConfig 的 location & fileSizeThreshold

对于刚使用 Servelt3.0 来做文件上传的人来说可能存在一个疑惑,那就是@MutipartConfig 中 location 和 fileSizeThreshold 到底怎么用.咋用都木有效果.

官方API

  • location : 设置上传文件的临时目录
  • fileSizeThreshold: 设置文件缓存的临界点,超过则先保存到临时目录

从官方API 上来说这个两个属性用法很清晰,那为什么没有效果呢?
其实是底层自动删除了临时文件的原因.

当请求处理方法service 中所有操作结束后会自定清除临时文件,所以我们看不到效果,那如果我们想看到效果怎么做呢?其实很简单,在所有操作之后睡几秒就可以看到临时文件了.

例子

@WebServlet("/fileUpload")
@MultipartConfig(location="E://temp",fileSizeThreshold=1024*100)
public class FileUploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        try {
            Part part = req.getPart("headImg");
            part.write("E://" + part.getSubmittedFileName());
            System.out.println("睡前...");
            Thread.sleep(3000);
            // 在此中间时间去观察临时目录 
            System.out.println("睡后...");
        } catch (Exception e) {
            req.setAttribute("msg", "异常信息");
            req.getRequestDispatcher("/upload.jsp").forward(req, resp);
        }
    }
}

以上操作,当我们上传一个超过100k 的文件就可以在 E://temp 中看到临时文件的生成和自动删除的效果.这样就不用再去纠结.

希望本文对您有帮助,喜欢就多多关注,更多技术,疑难杂症文章会陆续更新.

你可能感兴趣的:(@MutipartConfig 的 location & fileSizeThreshold)