HttpExchange发送文件

时间:2014-08-27 19:15:14

标签: java httpserver

我正在使用我的服务器分发一些文件(以zip格式),但是,我希望用户在能够下载文件之前输入验证码。

这提出了一个新问题,因为代码:

    private void sendFileResponse(final String filename, byte[] response, HttpExchange httpExchange) {
        //<editor-fold defaultstate="collapsed" desc="code">
        if (response != null && response.length > 0 && httpExchange != null) {
            try {
                httpExchange.setAttribute(HTTPExchange.HeaderFields.Content_Type.toString(), "application/zip");

                OutputStream outputStream = httpExchange.getResponseBody();
                httpExchange.sendResponseHeaders(200, response.length);
                outputStream.write(response);
                outputStream.flush();
                outputStream.close();
                httpExchange.getRequestBody().close();
            } catch (Exception e) {
                System.out.println(Misc.getStackTrace(e));
            }
        }
        //</editor-fold>
    }

...将导致文件被命名为下载请求网页的URL。例如,如果用户输入正确的CAPTCHA并在/download.html下载文件,则他们收到的文件将是download.html,而不是我的文件名。

如何让服务器将文件作为文件名发送,并使网页同时刷新?

感谢。

1 个答案:

答案 0 :(得分:4)

使用 Content-Disposition HTTP标头字段:

内容 - 处置:附件;文件名= yourfilename

httpExchange.getResponseHeaders().add("Content-Disposition", "attachment; filename=" + filename);