使用java从临时tomcat文件夹复制文件

时间:2010-09-17 12:43:18

标签: java tomcat file-upload

基本上我的问题是我需要复制一个上传的文件(放在我的服务器提供商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 "";

    }

}

2 个答案:

答案 0 :(得分:1)

File tempDir = (File) servletContext.getAttribute("javax.servlet.context.tempdir");

应该允许您访问Tomcat中的临时目录。如果你至少无法从那里读取文件,那就太奇怪了。

答案 1 :(得分:0)

  

当我在本地计算机上部署项目时,我正在使用的代码工作,但在我实时部署时停止工作。我发现它与java.policy中的权限有关。

是。这是Java安全沙箱的一个示例。

  

我需要了解的是如何访问Tomcat使用Java存储临时文件的文件夹。

您无法绕过安全沙箱(以JVM中的某些未修补的错误为模)。您需要做的是更改“java.policy”设置,以便您的webapp具有权限将文件复制到需要复制的位置。您可能需要与为您的生产Tomcats进行安全设计等的人讨论此事。