1

我目前正在开发一个 Web 应用程序。在此应用程序的某些部分,我想将文件上传到某个目录。最初,当我编写测试用例时,这非常有效:

final static String IMAGE_RESOURCE_PATH = "res/images";

...

File directory = new File(IMAGE_RESOURCE_PATH + "/" + productId);

if(!directory.exists()) {
    directory.mkdirs();
}

这将创建将上传文件的目录。结果路径将是:

[项目根文件夹]/res/images/[productId]

自从将应用程序部署到服务器(Tomcat 7)后,该目录在我正在使用的 IDE 的根目录中创建,这让我有点困惑。

例如:C:\Eclipse86\res\images

知道如何在不使用一些黑客技术或硬编码路径的情况下使用纯 Java 恢复到项目路径吗?

4

2 回答 2

5

如果您不指定绝对路径,您的目录将在应用程序的工作目录内(或者,如果正确,相对于)创建。

如果你想在你的 web 应用程序中获取目录,你应该使用getServletContext().getRealPath(String path). 例如,getServletContext().getRealPath("/")是应用程序根目录的路径。

要使用 path 创建目录[project root folder]/res/images/[productId],请执行以下操作:

// XXX Notice the slash before "res"
final static String IMAGE_RESOURCE_PATH = "/res/images";

...

String directoryPath = 
        getServletContext().getRealPath(IMAGE_RESOURCE_PATH + "/" + productId)
File directory = new File(directoryPath);

if(!directory.exists()) {
    directory.mkdirs();
}
于 2012-10-18T18:54:18.180 回答
1

几年前我写了一个 servlet 来下载一个文件。您可以快速重构它以进行上传。干得好:

public class ServletDownload extends HttpServlet {

    private static final int BYTES_DOWNLOAD = 1024;  
    public void doGet(HttpServletRequest request, 

    HttpServletResponse response) throws IOException {
        response.setContentType("text/plain");
        response.setHeader("Content-Disposition", "attachment;filename=downloadname.txt");
        ServletContext ctx = getServletContext();
        InputStream is = ctx.getResourceAsStream("/downloadme.txt");

        int read = 0;
        byte[] bytes = new byte[BYTES_DOWNLOAD];
        OutputStream os = response.getOutputStream();

        while((read = is.read(bytes))!= -1) {
            os.write(bytes, 0, read);
        }
        os.flush();
        os.close(); 
    }
}

此外,还有一种获取项目路径的简单方法,如 new File().getAbsolutePath()。

于 2012-10-18T20:35:52.360 回答