使用 AJAX GET 从 Spring 服务下载文件
Downloading a file using AJAX GET from Spring Service
我正在尝试实现一个自动开始下载请求文件的服务。
这是我的 AJAX 电话:
function downloadFile(fileName) {
$.ajax({
url : SERVICE_URI + "files/" + fileName,
contentType : 'application/json',
type : 'GET',
success : function (data)
{
alert("done!");
},
error: function (error) {
console.log(error);
}
});
}
这是我的 Spring 服务方法 GET:
@RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET)
public void getFile(@PathVariable("file_name") String fileName,
HttpServletResponse response) {
try {
// get your file as InputStream
FileInputStream fis = new FileInputStream( fileName + ".csv" );
InputStream is = fis;
// copy it to response's OutputStream
ByteStreams.copy(is, response.getOutputStream());
response.setContentType("text/csv");
response.flushBuffer();
} catch (IOException ex) {
throw new RuntimeException("IOError writing file to output stream");
}
}
当我的客户端从服务器请求现有文件时,AJAX success()
方法被执行但文件甚至没有下载。我做错了什么吗?
不要使用 ajax,只需将 window.location.href 设置为文件的 url 并在服务器脚本中设置 http 内容配置 header 以强制浏览器保存文件。
function downloadFile(fileName) {
window.location.href = SERVICE_URI + "files/" + fileName;
}
我正在尝试实现一个自动开始下载请求文件的服务。
这是我的 AJAX 电话:
function downloadFile(fileName) {
$.ajax({
url : SERVICE_URI + "files/" + fileName,
contentType : 'application/json',
type : 'GET',
success : function (data)
{
alert("done!");
},
error: function (error) {
console.log(error);
}
});
}
这是我的 Spring 服务方法 GET:
@RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET)
public void getFile(@PathVariable("file_name") String fileName,
HttpServletResponse response) {
try {
// get your file as InputStream
FileInputStream fis = new FileInputStream( fileName + ".csv" );
InputStream is = fis;
// copy it to response's OutputStream
ByteStreams.copy(is, response.getOutputStream());
response.setContentType("text/csv");
response.flushBuffer();
} catch (IOException ex) {
throw new RuntimeException("IOError writing file to output stream");
}
}
当我的客户端从服务器请求现有文件时,AJAX success()
方法被执行但文件甚至没有下载。我做错了什么吗?
不要使用 ajax,只需将 window.location.href 设置为文件的 url 并在服务器脚本中设置 http 内容配置 header 以强制浏览器保存文件。
function downloadFile(fileName) {
window.location.href = SERVICE_URI + "files/" + fileName;
}