前端下载文件的思路

缺乏、安全感 2023-05-28 14:27 57阅读 0赞

比如我们的用户在之前上传了各种类型的文件到我们的服务器上。然后在通过留存在数据库的服务器url我们就可以访问那个资源。

注意点:
a标签的href属性指向链接的目标可以是各种类型的文件。如果是浏览器能够识别的类型,会直接在浏览器上显示;如果是浏览器不能识别的类型,会弹出“文件下载”对话框,允许用户下载到本地。
比如jpg,html这些都是浏览器能够识别的就会直接展示,如果是docx一类的或者其他不能识别的类型那么就会弹出对话框确认下载。

那么针对浏览器支持的类型我们如何下载呢?
我们可以给a标签加一个download属性。这样就可以全部实现下载了。

备注:a标签download的浏览器支持情况:
在这里插入图片描述

关于IE的下载实现方式麻烦自行百度。笔者没有下载IE浏览器

根据上述内容我们的代码可以这么写:

中间笔者加了一些其他的事项,你也可以像笔者一样加在其中其他的处理方式。

  1. <!doctype html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>CSDN吴小迪</title>
  8. </head>
  9. <body>
  10. <button onclick="oneClickToDownload()" >一键下载
  11. </button>
  12. <a target="_blank" rel="noopener noreferrer" hidden id="downloadAEle" >
  13. 隐藏的下载a标签
  14. </a>
  15. <script> const downloadAEle = document.getElementById('downloadAEle'); async function oneClickToDownload() { // 可以在这里设置loading防止用户反复点击 // 后端进行压缩操作 这个getTheZipUrl是一个请求,是后端同事给你的哦 const res = await getTheZipUrl({ objectId: entityId, objectType: entityName, }); if (res.errors) { // 针对压缩失败进行一些错误处理 if (res.errors === '{errcode:-1}') { alert('压缩未成功或没有附件可压缩,请检查后重试'); } else { alert(JSON.stringify(res.errors)) } } else { const name = `附件-${ moment(+new Date()).format('YYYY-MM-DD:hh:mm')}.zip`; // 设置隐藏的a标签的href地址 downloadAEle.current.href = `${ appBaseUrl}file?url=${ encodeURI( res.data )}&fileName=${ name}`; // 触发点击进行下载 downloadAEle.current.click(); } // 取消loading }; </script>
  16. </body>
  17. </html>

发表评论

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

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

相关阅读

    相关 前端下载文件方式

    需求:页面上有一个下载按钮,点击后实行文件下载功能。 方式一:使用window.open() 方式二:使用form表单下载 方式三:使用a标签,H5中有download属

    相关 前端下载文件思路

    比如我们的用户在之前上传了各种类型的文件到我们的服务器上。然后在通过留存在数据库的服务器url我们就可以访问那个资源。 > 注意点: > a标签的href属性指向链接的目