Apache Commons ServletFileUpload锁定Windows上已下载的文件

问题描述

我在Servlet中使用Tomcat 9和Apache Commons ServletFileUpload API

   private static DiskFileItemFactory diskFileItemFactory;

   public void init() throws ServletException {
      diskFileItemFactory = getDiskFileItemFactory(getServletConfig().getServletContext(),2*1024*1024,new File(System.getProperty("java.io.tmpdir")));
   }

   protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
      try {
         boolean isMultiPart = ServletFileUpload.isMultipartContent(request);
         List<FileItem> items = null;
         if (isMultiPart) {
            ServletFileUpload upload = new ServletFileUpload(diskFileItemFactory);
            upload.setSizeMax(2*1024*1024);
            items = upload.parseRequest(request);

            int instance = 0;
            for (FileItem item : items) {
               if (!item.isFormField()) {
                  String fieldname = item.getFieldName();
                  String filename = FilenameUtils.getName(item.getName());

                  File userDirectory = new File('c:\\test');
                  String extension = filename.replaceAll("^.*\\.",".").toLowerCase();
                  String landingFilename = "image" + (instance++) + extension;

                  File f = new File(userDirectory,landingFilename);
                  item.write(f);
                  item.delete();
               }
            }
         }
      }  
   }  

   public static DiskFileItemFactory getDiskFileItemFactory(ServletContext context,int maxSize,File repository) {
      FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(context);
      DiskFileItemFactory factory = new DiskFileItemFactory(maxSize,repository);
      factory.setFileCleaningTracker(fileCleaningTracker);
      factory.setSizeThreshold(2*1024*1024);
      return factory;
   }   
} 

我的问题是文件上传到服务器并放置在c:\ test中之后,它们已被tomcat锁定。当我尝试删除它们时,我会得到

File Locked by Tomcat

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...