java - 上传后无法检索由 javax HttpServlet 创建的临时文件
问题描述
我有一个问题,该问题仅在将 Web 应用程序打包到 WAR 并安装在 Tomcat 服务器上时发生 - 它在开发期间不会发生。
我要做的是:
我
Part
从HttpServletRequest
上传的文件中检索:Part uploadedFile = null; for(Part part: parts) { if(part == null) continue; if(uploadFieldName.equalsIgnoreCase(part.getName())) { uploadedFile = part; break; } }
然后我存储这个
Part
对象以供以后使用(它不能立即使用)。代码有点复杂,但本质上类似于:// List of uploaded files pending // List declared as: // protected List<Part> uploadedFiles; synchronized(this.uploadedFiles) { this.uploadedFiles.add(uploadedFile); }
稍后,我尝试从另一个线程获取文件。
// Assume that the method is synchronized Part reqrievedFile = myUploadService.getFileFromArray(); synchronized(retrievedFile) { doSomething(retrievedFile.getInputStream());
最后我在使用后 5 分钟删除了文件:
retrievedFile.delete();
在 Eclipse 中测试时,效果很好,文件可用,我可以处理它。
但是当这个特性被添加到测试代码并上传到测试Tomcat服务器时,测试人员遇到了这个错误:
IOException: C:\apache-tomcat-8.5.34\work\Catalina\localhost\Projectname\upload_9357ad4d_193f_40fc_96d6_b6e4b9e3c82a_00000001.tmp(系统找不到指定的文件)
解决方案
推荐阅读
- jboss - 如何使用 Jboss CLI 向现有数据源添加属性
- selenium-webdriver - 无法通过 selenium 找到 Intranet Web UI 的 Web 元素通过 id、name..etc 查找元素一路
- ios - 可设计构建失败:无法附加到 pid:“26000”
- python - 字符串替换未写入文件
- python - 如何纠正 sklearn.naive_bayes 中的 sample_weight?
- typescript - 使用实时数据库时,与使用 firebase 函数在 typescript 中查询 firebase 等效的 .get() 方法是什么?
- javascript - 如何添加指向此动画按钮的链接
- unity3d - 清理现有 Unity 项目并将其迁移到新的一台或另一台 PC
- c++ - 如何使用 Google Speech To Text API 进行实时转录流音频
- java - 如果我动态地将 fileId 传递给查询,Google drive api to get all children 不起作用