如何使浏览器下载文件并提供自定义标头?

时间:2019-04-19 12:02:49

标签: angular http download xmlhttprequest http-headers

我们希望从Angular前端为客户提供以不同格式(csvjsonpdf等)下载数据的功能。为了提供该功能,我们的后端系统要求请求包含一个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:这不是重复的文件,我的文件没有损坏。我当前的解决方案实际上是有效的,它非常难看,我想知道是否有更好的方法。

0 个答案:

没有答案