怎么指定下载文件名?

在浏览器中下载文件是一个比较常见的操作,那么你知道在前端怎么去给要下载的文件指定一个文件名吗?

1. 指定 Content-Disposition 响应头

通过设置响应头中的 Content-Disposition 字段,可以来指定下载文件的文件名。我们需要将 Content-Disposition 设置为 attachment ,并在 filename 参数中指定所需的文件名。

比如我需要将下载文件的文件名设置为 file.txt ,可以这样设置:

res.setHeader('Content-Disposition', 'attachment; filename=file.txt');

2. 通过 a 标签的 download 属性

除了上面需要在后端设置响应头的方式之外,还可以通过在前端给 a 标签添加 download 属性来实现。

例如如下链接,链接指向的是一个图片,当点击下载时,会将图片下载到本地,并且文件名为 baidu.png

<a href="https://www.baidu.com/img/bd_logo1.png" download="baidu.png">下载</a>

当然,我们还可以通过使用 Blob 来实现相同的下载功能,其方式和上面使用 a 标签的方式类似。

function downloadFile(url, filename) {
  fetch(url)
    .then((response) => response.blob())
    .then((blob) => {
      const link = document.createElement('a');
      link.href = URL.createObjectURL(blob);
      link.download = filename;
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);