从JavaServlet下载文件

时间:2016-12-07 20:30:28

标签: javascript java servlets

我有一个名为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();

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

由于

1 个答案:

答案 0 :(得分:1)

您无法使用AJAX下载文件。

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

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

如果您不希望直接链接到该文件,通常的方法是让Javascript将整个标签重定向到文件的网址,例如window.location.href = 'http://example.com/myfile';