前端下载文件,但是服务端指定了Content-Disposition,如何使用前端定义的文件名
时间: 2023-12-13 19:02:53 浏览: 120
Content-Disposition使用方法和注意事项
如果服务端已经指定了`Content-Disposition`,那么浏览器会根据服务端返回的响应头中的文件名来保存文件,通常情况下,浏览器会使用服务端提供的文件名来保存文件,而不是使用前端定义的文件名。
如果你希望使用前端定义的文件名来保存文件,可以考虑在服务端返回响应头时,使用一个自定义的头部(如`X-Filename`)来传递前端定义的文件名,然后在前端下载文件时,使用这个自定义头部来获取文件名,例如:
服务端代码:
```
// 假设服务端返回的文件名为 file1.pdf
res.setHeader('Content-Disposition', 'attachment; filename="file1.pdf"');
res.setHeader('X-Filename', 'file2.pdf'); // 自定义头部,传递前端定义的文件名
res.sendFile('/path/to/file1.pdf');
```
前端代码:
```
fetch('/download/file1.pdf')
.then(res => {
const filename = res.headers.get('X-Filename') || 'file1.pdf'; // 获取自定义头部中的文件名,如果没有则使用服务端返回的文件名
return res.blob().then(blob => {
const a = document.createElement('a');
a.style.display = 'none';
a.href = window.URL.createObjectURL(blob);
a.download = filename;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(a.href);
document.body.removeChild(a);
});
});
```
这样就可以在前端使用自定义的文件名来保存文件了。
阅读全文