配置 Grails 控制器以在从服务检索数据后在浏览器中下载文件

Configure Grails controller to download file in browser after retrieving data from service

我在 Grails 中的控制器首先从远程服务中获取数据 API,返回的数据是一个字符串。然后我想在浏览器中将数据下载为 csv 文件。我在 SO 上遇到了类似的 post 并窃取了使用响应的代码,如下所示:

String exportResults = dataService.getDataFromService()
response.setHeader "Content-disposition", "attachment; filename=data_export.csv"
response.contentType = 'text/csv'
response.outputStream << exportResults.getBytes() //getBytes() not portable
response.outputStream.flush()

但是这不会触发浏览器中的任何下载window。我想知道为什么。我使用 AngularJS 向控制器发出 POST 请求并解决如下承诺(JavaScript 代码):

ExportService.exportData(some_params).then(function(data) {
               $log.info('export promise resolved: ');
               //window.open(data, '_blank', ''); //not working
               }).catch(function(err) {
               $scope.message = "failed to retrieve data from export service";
               $log.error(err);
               }).finally(function(complete) {
                 $scope.message = "Data export completed.";
               });

尝试在 response.outputStream.flush() 之后添加这个,看看是否有效。

webRequest.renderView = false

您甚至可以尝试查看 here

对于 response.contentType,您需要将 'text/csv' 替换为 'application/octet-stream'。内容类型 'application/octet-stream' 用于二进制文件。