基本上我的问题是我需要复制一个上传的文件(放在我的服务器提供商Tomcat上的临时文件夹中,即不是本地Tomcat)。
当我在本地计算机上部署项目时,我正在使用的代码工作,但在我实时部署时停止工作。 我发现它与java.policy中的权限有关。
我需要了解的是如何访问Tomcat使用Java存储临时文件的文件夹。
当阅读catalina.out时,这是日志给我的线索。
/ usr / local / tomcat / work / Catalina /项目名称/项目背景/ upload_490341a6_12b1d397355_76ce_00000001.tmp
我在想某个地方(注意:这不是一个实际的方法:P)
ServletActionContext.getContext()getSuperHiddenTemporaryCatalog();
底部的代码段有一个缺陷。
sourceFile和targetFile目前指向同一目录。
我希望sourceFile路径成为临时的tomcat文件夹。
提前致谢! :d
public String saveImage(File file, String uploadedFileName) {
String path = ServletActionContext.getServletContext().getRealPath("images");
System.out.println(path);
String fullFileName = path + "/" + uploadedFileName;
System.out.println(fullFileName);
boolean successful = false;
try {
File sourceFile = new File(fullFileName);
File targetFile = new File(path + "/" + uploadedFileName);
InputStream in = new FileInputStream(sourceFile);
OutputStream out = new FileOutputStream(targetFile);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
} catch (Exception e) {
successful = false;
e.printStackTrace();
}
if (successful) {
return "context of project/images/" + uploadedFileName;
} else {
return "";
}
}
答案 0 :(得分:1)
File tempDir = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
应该允许您访问Tomcat中的临时目录。如果你至少无法从那里读取文件,那就太奇怪了。
答案 1 :(得分:0)
当我在本地计算机上部署项目时,我正在使用的代码工作,但在我实时部署时停止工作。我发现它与java.policy中的权限有关。
是。这是Java安全沙箱的一个示例。
我需要了解的是如何访问Tomcat使用Java存储临时文件的文件夹。
您无法绕过安全沙箱(以JVM中的某些未修补的错误为模)。您需要做的是更改“java.policy”设置,以便您的webapp具有权限将文件复制到需要复制的位置。您可能需要与为您的生产Tomcats进行安全设计等的人讨论此事。