背景:假如有一个附件,需要下载,最简单的方式是window.open调用浏览器的下载,如果产品说希望下载的时候重命名一下,原始名称abc.pdf,下载后变为说明.pdf;这个需求是本次文章介绍的重点
实现下载时文件重命名的常见方法: 1、通过后端接口输出文件流的方式,后端做了文件重命名逻辑,前端调用只传url、realName即可 2、利用a标签的download属性 3、利用javascript的blob方式
代码示例: a标签download方式
fetch('path/to/file.pdf') .then(response => response.blob()) .then(blob => { var downloadLink = document.createElement('a'); downloadLink.href = URL.createObjectURL(blob); downloadLink.download = 'new-file-name.pdf'; document.body.appendChild(downloadLink); downloadLink.click(); URL.revokeObjectURL(downloadLink.href); });
使用 Blob 对象和 URL.createObjectURL() 方法的优点是可以避免将文件内容暴露在 URL 中,更加安全。但是需要注意的是,如果下载的文件比较大,可能会占用较多的内存。
Blob方式
- 创建一个下载链接元素,例如:
html <a id="download-link" href="path/to/file.pdf">Download PDF</a> - 使用 JavaScript 获取该元素,并设置其 download 属性为新的文件名,例如:
javascript var downloadLink = document.getElementById('download-link'); downloadLink.download = 'new-file-name.pdf'; - 当用户点击该链接时,浏览器将会下载该文件,并使用新的文件名保存到本地。 完整的代码示例:
html <a id="download-link" href="path/to/file.pdf">Download PDF</a> <script> var downloadLink = document.getElementById('download-link'); downloadLink.download = 'new-file-name.pdf'; </script>
优缺点:
使用 downloadLink.download 下载的优点是:
1. 简单易用:只需要设置 download 属性即可实现下载文件时重命名的功能,无需使用额外的 JavaScript 代码。
2. 兼容性好:download 属性已经被主流浏览器广泛支持,包括 Chrome、Firefox、Safari、Edge 等。
3. 安全性高:使用 download 属性下载文件时,浏览器会自动检查文件类型和扩展名,如果文件类型不匹配或者扩展名不合法,会提示用户是否下载该文件,从而避免了一些安全问题。
使用 downloadLink.download 下载的缺点是:
1. 无法自定义下载文件的存储路径:下载的文件会默认保存在浏览器的下载文件夹中,无法指定其他路径。
2. 不支持断点续传:如果下载的文件比较大,可能会因为网络问题或者其他原因导致下载失败,无法继续下载。
3. 无法在下载过程中显示进度条:使用 downloadLink.download 下载文件时,无法获取下载进度,也无法在下载过程中显示进度条,给用户带来不便。
综上所述,使用 downloadLink.download 下载文件时重命名的功能简单易用,兼容性好,安全性高,但是无法自定义下载文件的存储路径,不支持断点续传,无法在下载过程中显示进度条。如果需要更加灵活的下载方式,可以考虑使用其他方法,例如 Blob 对象和 URL.createObjectURL() 方法。