我有一个名为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();
如何下载文件并将用户保留在下载按钮所在的页面上?
由于
答案 0 :(得分:1)
您无法使用AJAX下载文件。
如果您执行AJAX,则会在提供的回调中获得响应。您的Javascript可以按照自己喜欢的方式使用它,但它不会在浏览器中触发下载。
浏览器在发送(整页)请求时显示下载对话框,并收到一个标题,指示响应包含文件而不是网站。
如果您不希望直接链接到该文件,通常的方法是让Javascript将整个标签重定向到文件的网址,例如window.location.href = 'http://example.com/myfile';
。