首页 > 解决方案 > 上传后无法检索由 javax HttpServlet 创建的临时文件

问题描述

我有一个问题,该问题仅在将 Web 应用程序打包到 WAR 并安装在 Tomcat 服务器上时发生 - 它在开发期间不会发生。

我要做的是:

  1. PartHttpServletRequest上传的文件中检索:

        Part uploadedFile = null;
        for(Part part: parts) {
            if(part == null)
                continue;
            if(uploadFieldName.equalsIgnoreCase(part.getName())) {
                uploadedFile = part;
                break;
            }
        }
    
  2. 然后我存储这个Part对象以供以后使用(它不能立即使用)。代码有点复杂,但本质上类似于:

    // List of uploaded files pending
    // List declared as:
    // protected List<Part> uploadedFiles;
    synchronized(this.uploadedFiles) {
        this.uploadedFiles.add(uploadedFile);
    }
    
  3. 稍后,我尝试从另一个线程获取文件。

    // Assume that the method is synchronized
    Part reqrievedFile = myUploadService.getFileFromArray();
    synchronized(retrievedFile) {
         doSomething(retrievedFile.getInputStream());
    
  4. 最后我在使用后 5 分钟删除了文件:

    retrievedFile.delete();
    

在 Eclipse 中测试时,效果很好,文件可用,我可以处理它。

但是当这个特性被添加到测试代码并上传到测试Tomcat服务器时,测试人员遇到了这个错误:

IOException: C:\apache-tomcat-8.5.34\work\Catalina\localhost\Projectname\upload_9357ad4d_193f_40fc_96d6_b6e4b9e3c82a_00000001.tmp(系统找不到指定的文件)

标签: javatomcatservlets

解决方案


推荐阅读