Apache Tomcat - 从bin文件夹下载文件

时间:2015-09-07 17:10:08

标签: java jsp tomcat

我正在使用一个在tomcat bin文件夹中创建文件的API,我创建了一个servlet来使文件可以下载但我应该指向bin文件夹的路径是什么?网站网址就像

abc.co.uk/test/home.jsp

这是我的servlet代码:

private static final int DEFAULT_BUFFER_SIZE = 102400; //100KB
private String filePath;

public void init() throws ServletException
{
    this.filePath = getServletContext().getRealPath("/");
    System.out.println("Original Path: " + filePath + ": " + this.filePath.indexOf("webapps") + 1);
    this.filePath = this.filePath.substring(0, this.filePath.indexOf("webapps")) + "home/";
    System.out.println("FilePath1: " + this.filePath);
    //"C:\\Users\\Admin\\Documents\\NetBeansProjects\\MSc\\model";
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    String requestedFile = request.getPathInfo();

    // Check if file is actually supplied to the request URI.
    if (requestedFile == null) {
        // Do your thing if the file is not supplied to the request URI.
        // Throw an exception, or send 404, or show default/warning page, or just ignore it.
        response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
        return;
    }

    // Decode the file name (might contain spaces and on) and prepare file object.
    File file = new File(filePath, URLDecoder.decode(requestedFile, "UTF-8"));

    // Check if file actually exists in filesystem.
    if (!file.exists()) {
        // Do your thing if the file appears to be non-existing.
        // Throw an exception, or send 404, or show default/warning page, or just ignore it.
        response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
        return;
    }

    // Get content type by filename.
    String contentType = getServletContext().getMimeType(file.getName());

    // If content type is unknown, then set the default value.
    // For all content types, see: http://www.w3schools.com/media/media_mimeref.asp
    // To add new content types, add new mime-mapping entry in web.xml.
    if (contentType == null) {
        contentType = "application/octet-stream";
    }

    // Init servlet response.
    response.reset();
    response.setBufferSize(DEFAULT_BUFFER_SIZE);
    response.setContentType(contentType);
    response.setHeader("Content-Length", String.valueOf(file.length()));
    response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");

    // Prepare streams.
    BufferedInputStream input = null;
    BufferedOutputStream output = null;

    try {
        // Open streams.
        input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
        output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);

        // Write file contents to response.
        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
        int length;
        while ((length = input.read(buffer)) > 0) {
            output.write(buffer, 0, length);
        }
    } finally {
        // Gently close streams.
        close(output);
        close(input);
    }



    processRequest(request, response);
} 

这是锚标记代码:

  <a href="./final.cmp">DOWNLOAD MODEL FILE!!!</a>

我需要一些帮助。

1 个答案:

答案 0 :(得分:1)

可以通过环境变量CATALINA_BASE或系统属性catalina.base

访问tomcat bin目录

例如:

System.getProperty("catalina.base") + File.separator + "bin"

bin目录中生成文件听起来像是放置它们的最糟糕的地方之一。您最好将生成的文件放在自己的目录中,以便分离权限要求。