我有一个Java端点,它返回一个excel (我正在使用content-disposition=Content-Disposition","attachment; filename=Audit.Report.xlsx)。
我有另一个角节点JS应用程序,它需要使用这个API,当用户单击一个链接时,它应该拉出excel并显示一个弹出,询问他们保存文档的位置。我不知道如何才能做到这一点。不过,我试过在服务器端做以下操作,
服务器代码:
getAuditReport = function ( req, resp ) {
var numberOfMonths = req.query.numberOfMonths;
console.log('In first method ' + numberOfMonths);
var auditReportPromise = this.getAuditReportXlPromise ( numberOfMonths );
auditReportPromise.then ( function ( data ) {
resp.headers('Content-Disposition: attachment; filename="audit.report_'+ new Date() + '".xls"');
resp.ContentType = "application/vnd.ms-excel";
resp.status ( 200 ).send ( data );
} ).catch ( function ( err ) {
resp.status ( 500 ).send ( err );
} );
}getAuditReportXlPromise方法返回调用Java的get方法的承诺。在通过浏览器调用此API时,我在浏览器上获得excel内容,而不是请求我将文档保存在某个地方的提示符。
有人能建议这里有什么问题吗,我需要在客户端做些什么才能让点击功能起作用。
更新1:下面是来自HTML的代码
<a id='10051' href="{{url}}" target=_blank class="ok-white-text">
Download Report
</a>根据用户选择的持续时间,我正在构建URL --这是正确构建的。
发布于 2017-12-28 19:04:40
如果您的API使用GET提供文件,那么您只需设置一个指向该API的链接(即包含<a href="https://theapihost/getfile?fileId=someId" target="_blank">Download</a>之类的链接的锚)就可以以简单的方式下载该文件。
在此场景中,浏览器将接管下载过程(即,如果配置为定位要下载到的文件夹)。
如果要在客户端处理该文件,则需要按照this question的多个答复的建议,以二进制模式传输该文件。
发布于 2018-01-04 20:20:34
为了回答我是如何设法避开这件事的,
客户端:在组件中,我做了以下操作--编写了一个方法,点击包含到url的window.open按钮--类似于,
window.open("<path to the java api>", '_blank');我前面提到的链接是一个已经生成excel文件的java。
https://stackoverflow.com/questions/48012843
复制相似问题