对于刚使用 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 中看到临时文件的生成和自动删除的效果.这样就不用再去纠结.
希望本文对您有帮助,喜欢就多多关注,更多技术,疑难杂症文章会陆续更新.