js下载url文件

冷不防 2022-10-16 00:46 281阅读 0赞

需求

后台返回文件的URL,前端自动下载

实现

  1. function download(url, filename){
  2. const elelink = document.createElement("a");
  3. elelink.style.display = 'none';
  4. elelink.download = filename;
  5. elelink.href = url;
  6. document.body.appendChild(elelink);
  7. elelink.click();
  8. document.body.removeChild(elelink);
  9. }

遇到的问题

当下载文件是txt格式时,浏览器会自动打开。

解决方法一:在服务器后台nginx配置http请求头

  1. server {
  2. listen 8080;
  3. location ~ /group([0-9])/M00 {
  4. if ($request_filename ~* ^.*?.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){
  5. add_header Content-Disposition attachment;
  6. }
  7. root /opt/fastdfs;
  8. ngx_fastdfs_module;
  9. }
  10. }

解决方法二:下载文件并保存到本地

  1. // 保存到本地并自动点击
  2. function saveAs(data, name) {
  3. const urlObject = window.URL || window.webkitURL || window;
  4. const export_blob = new Blob([data]);
  5. const save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
  6. save_link.href = urlObject.createObjectURL(export_blob);
  7. save_link.download = name;
  8. save_link.click();
  9. }
  10. // 下载含有url的文件
  11. function downloadUrlFile(url, fileName) {
  12. const xhr = new XMLHttpRequest();
  13. xhr.open('GET', url, true);
  14. xhr.responseType = 'blob';
  15. //xhr.setRequestHeader('Authorization', 'Basic a2VybWl0Omtlcm1pdA==');
  16. // 为了避免大文件影响用户体验,建议加loading
  17. xhr.onload = () => {
  18. if (xhr.status === 200) {
  19. // 获取文件blob数据并保存
  20. saveAs(xhr.response, fileName);
  21. }
  22. };
  23. xhr.send();
  24. }
  25. downloadUrlFile(url, fileName);

文件type类型


































后缀 MIME Type
.doc application/msword
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.xls application/vnd.ms-excel
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.ppt application/vnd.ms-powerpoint
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation

本文参考文章:

https://www.cnblogs.com/huchong-bk/p/11846927.html

发表评论

表情:
评论列表 (有 0 条评论,281人围观)

还没有评论,来说两句吧...

相关阅读