【问题标题】:Download file from JavaServlet [duplicate]从 JavaServlet 下载文件 [重复]
【发布时间】:2017-04-22 22:46:50
【问题描述】:

我有一个名为 DownloadFile 的 java servlet,在 Get 方法中我有一些代码可以从数据库中获取文件并在我导航到 url 时下载它

localhost:9080/myapp/DownloadFile 

但我不想让我的用户到这个页面去下载文件,所以在我的 javascript 中点击一个按钮我有这个

$scope.downloadTemplate = function(){
    console.log("download template called");
    $.get("DownloadTemplate", function(responseText) {   
        console.log(responseText)
    });
}

函数被调用,servlet 被调用但文件没有下载。为什么?这是相关的servlet代码

bytes = templateSet.getBytes("FILE");
            fileName = templateSet.getString("TEMPLATE_FILE_NAME");

            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition",
                    "attachment;filename=" + fileName);

            ServletOutputStream out = response.getOutputStream();
            out.write(bytes);
            out.flush();
            out.close();

如何下​​载文件并让用户停留在下载按钮所在的页面上?

谢谢

【问题讨论】:

标签: javascript java servlets


【解决方案1】:

您不能使用 AJAX 下载文件。

如果您执行 AJAX,您会在提供的回调中获得响应。您的 Javascript 可以以任何喜欢的方式使用它,但不会触发浏览器中的下载。

浏览器在发送(整页)请求并收到指示响应包含文件而不是网站的标头时显示下载对话框。

如果您不想直接链接到文件,通常的做法是让 Javascript 将整个选项卡重定向到文件的 URL,例如 window.location.href = 'http://example.com/myfile';

【讨论】:

    猜你喜欢
    • 2013-11-13
    • 2020-07-29
    • 2019-12-16
    • 2015-08-01
    • 2012-01-09
    • 2016-10-22
    • 2012-11-30
    • 2012-12-25
    • 2018-09-24
    相关资源
    最近更新 更多