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 (将#修改为@)