我们希望从Angular前端为客户提供以不同格式(csv
,json
,pdf
等)下载数据的功能。为了提供该功能,我们的后端系统要求请求包含一个Accept
标题,以指定应以哪种格式发送响应。一个简单的<a>
html元素只能包含一个href
网址。该方法不允许我们添加Accept
标题; window.location.href
也是如此。
我们可以通过XHR调用发送包含Accept
标题的请求。但是然后,响应中的Content-Disposition
标题将被忽略,浏览器将不会开始下载。我们不希望使用幻像元素技巧,即将dataURL放在隐藏的href
元素的<a>
中,然后以编程方式单击它,因为文件可能会变得很大。我想知道是否有更好的方法来实现这种行为?
编辑:这是我现在使用的代码。还有更好的选择吗?
const blob = new Blob([response], {type: 'text/plain'});
const filename = 'file.txt';
if (typeof(window.navigator.msSaveBlob) == 'function') {
window.navigator.msSaveBlob(blob, filename);
return;
}
const anchor = document.getElementById('downloadInitiationAnchor') as HTMLAnchorElement;
const url = URL.createObjectURL(blob);
anchor.download = filename;
anchor.href = url;
anchor.click();
URL.revokeObjectURL(url);
编辑2:这不是重复的文件,我的文件没有损坏。我当前的解决方案实际上是有效的,它非常难看,我想知道是否有更好的方法。