我正在使用AngularJS和Spring编写应用程序。我想将请求发送到服务器,并将控制器返回的响应下载为文件。在控制器中,我有csv文件的内容(作为字符串),即1;2;3;4(1行4列)。将此响应下载为文件的最简单方法是什么?
1;2;3;4
下面,我发布了我的简化代码。在Spring控制器中:
@RequestMapping(value = "/csv", method = GET) @ResponseBody public String getCsvFile() { return getCsvContent(); }
在javascript(AngularJS)中
return $http({method: 'GET', url: 'csv/'});
我也在尝试(在下面)写入响应流,设置标头,但是在客户端,我总是以字符串的形式获取此内容,而不是作为要下载的文件。
@RequestMapping(value = "/csv", method = GET) @ResponseBody public void getCsvFile(HttpServletResponse response) { response.setContentType("application/csv"); response.setHeader("Content-Disposition", "attachment; filename=file.csv"); response.setContentLength(getCsvContent().getBytes().length); ServletOutputStream out = response.getOutputStream(); out.write(getCsvContent()); out.flush(); out.close(); }
有谁知道如何正确编写控制器的方法以便将响应作为文件下载到客户端?
您无法通过XHR请求(Angular发出请求的方式)下载文件。请参见为什么threre无法使用ajax请求下载文件?您要么需要通过转到URL,$window.open要么执行此处显示的iframe技巧:JavaScript / jQuery通过JSON数据通过POST下载文件
$window.open