如何在Tomcat中自动创建新文件夹并将其用于存储上传的数据?

时间:2012-01-01 14:09:08

标签: java tomcat

好的,我学习并实现如何从服务器计算机本身的文件夹上传和检索图像。但是我已经在我的webapp目录中的文件夹中实现了它。 我知道这不是一个好主意但是image具有路径/image/*的servlet无法访问context中设置server.xml路径的目录中的文件夹。 代码是: Image.java servlet

public class Image extends HttpServlet {

public static void returnFile(String filename, OutputStream out)
        throws FileNotFoundException, IOException {
    // A FileInputStream is for bytes
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(filename);
        byte[] buf = new byte[4 * 1024];  // 4K buffer
        int bytesRead;
        while ((bytesRead = fis.read(buf)) != -1) {
            out.write(buf, 0, bytesRead);
        }
    } finally {
        if (fis != null) {
            fis.close();
        }
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // Use a ServletOutputStream because we may pass binary information
    ServletOutputStream out = response.getOutputStream();

    // Get the file to view
    String file = request.getPathTranslated();

    // No file, nothing to view
    if (file == null) {
        out.println("No file to view");
        return;
    }

    // Get and set the type of the file
    String contentType = getServletContext().getMimeType(file);
    response.setContentType(contentType);

    // Return the file
    try {
        returnFile(file, out);
    } catch (Exception ex) {
        System.out.print("\n" + ex.getMessage() + "\n");
        ex.printStackTrace();
    }
}

}

context variable:

<Context path="*/photos/users" docBase="G:\myApp\images\users" debug="0" reloadable="true" />

我想要的是在我的webapp附近提供任意路径之类的 / data / users 来代替绝对路径 G:\ myApp \ images \用户是在任何Tomcat 6.x / 7.x服务器计算机上首次部署webapp时动态创建的,并且可以在我想访问其中的数据时使用。 我希望我对我的问题很清楚。

1 个答案:

答案 0 :(得分:1)

您可以使用File.mkdirFile.mkdirs创建目录。第一个在其指定的父级中创建目录,该父级必须已存在。如果需要,第二个也创建父目录和“祖先”目录。

请注意,您的应用程序可能没有足够的权限在任意位置创建目录或文件。此外,虽然File.mkdirs可以创建许多目录,但它不能在不存在的Windows驱动器上创建内容。因此,请务必检查booleanmkdir方法返回的mkdirs。 (如果它是false,那么就没有什么可以做的了!)


话虽如此,我不认为webapp使用Web容器之外的目录是个好主意,更不用说创建它们了。正如@Thorbjørn的评论所暗示的,这可能导致一系列可移植性和平台问题,并且它可以限制部署者部署Web应用程序的选项(通常)。 Web容器沙盒也存在问题...如果部署者选择这样做。

如果您确实使用文件系统来保持webapp状态的持久性,那么让部署者手动创建基本目录是个更好的主意。至少他/她知道它已被创建以及它在哪里......如果他/她得到路径名错误,webapp可以检测到这一点并拒绝启动。 (这也解决了权限问题。对于部署者来说,运行带有提升权限的mkdir命令比运行具有提升权限的Web容器更好。)