ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

前端下载图片、pdf、excel、world文件;前端下载图片和pdf文件;前端a标签下载图片和pdf文件;下载文件名称不生效原因

2022-09-16 16:00:51  阅读:310  来源: 互联网

标签:前端 blog href new download pdf document 下载


https://blog.csdn.net/i_am_a_div/article/details/125050379

 

https://blog.csdn.net/moguzhale/article/details/107704621?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165390015016782425114724%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165390015016782425114724&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-107704621-null-null.142%5Ev11%5Epc_search_result_control_group,157%5Ev12%5Econtrol&utm_term=%E5%89%8D%E7%AB%AF%E5%9B%BE%E7%89%87%E4%B8%8B%E8%BD%BD&spm=1018.2226.3001.4187

 

https://blog.csdn.net/snsHL9db69ccu1aIKl9r/article/details/119362095?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%89%8D%E7%AB%AF%E5%9B%BE%E7%89%87%E4%B8%8B%E8%BD%BD&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-119362095.142%5Ev11%5Epc_search_result_control_group,157%5Ev12%5Econtrol&spm=1018.2226.3001.4187

参考文章1参考文章2
以下的下载是,拿到了后端给的下载图片的接口地址url


> 方法1:将文本或者JS字符串通过 Blob 转换成二进制下载
优点:可以下载,也可以保存名称。
//文件流参数和图片名称function downloadTxt(str, filename){    let a = document.createElement('a')    a.download = filename    a.style.display = 'none'    let blob = new Blob([str])    a.href = URL.createObjectURL(blob)    document.body.appendChild(a)    a.dispatchEvent(new MouseEvent('click'))    document.body.removeChild(a)}
123456789101112> 方法2:原生的下载方法
优点:可以下载,也可以保存名称。 推荐!!!!
    downLoadFileImg (fileUrl, fileName) {      // fileUrl -- 后端下载地址 可能是拼接了文件id, fileName -- 下载文件名称        // 可以下载 没名称      // location.href = fileUrl

      // 可以下载 但是名称设置无效      // let a = document.createElement('a')      // a.download = fileName      // a.href = fileUrl      // a.dispatchEvent(new MouseEvent('click'))
      // 名称设置有效但是下载文件打不开      // // let a = document.createElement('a')      // // a.download = fileName //图片名称      // // a.style.display = 'none'      // // let blob = new Blob([fileUrl]) //图片地址      // // a.href = URL.createObjectURL(blob)      // // document.body.appendChild(a)      // // a.dispatchEvent(new MouseEvent('click'))      // // document.body.removeChild(a)
      // 会打开新的页面下载 但是没名称      // const newWindow = window.open()      // newWindow.document.write(      //   '<iframe width="100%" height="100%" src="' + fileUrl +      //   '" frameborder="0" allowfullscreen></iframe>'      // )      // newWindow.document.title = fileName
      // 可下载,名称也有效 -- 推荐      const x = new window.XMLHttpRequest()      x.open('GET', fileUrl, true)      x.responseType = 'blob'      x.onload = () => {        const url = window.URL.createObjectURL(x.response)        const a = document.createElement('a')        a.href = url        a.download = fileName        a.click()      }      x.send()
    },123456789101112131415161718192021222324252627282930313233343536373839404142434445> 方法3:a标签下载
a标签html5版本新增了download属性,用来告诉浏览器下载该url,而不是导航到它,可以带属性值,用来作为保存文件时的文件名,尽管说有同源限制,但是我实际测试时非同源的也是可以下载的。
对于没有设置Content-Disposition响应头或者设置为inline的图片来说,因为图片对于浏览器来说是属于能打开的文件,所以并不会触发下载,而是直接打开,浏览器不能预览的文件无论有没有Content-Disposition头都会触发保存:其中:href是下载地址,download是下载名称;href 的下载地址 和 当前网站地址 必须是 同源的 ,否则download名称不生效。
<a href="../../static/demo.jpg" download="demo.jpg" target="_blank">demo.jpg</a>1<!-- 直接打开 --><a href="/test.jpg" download="test.jpg" target="_blank">jpg静态资源</a><!-- 触发保存 --><a href="/test.zip" download="test.pdf" target="_blank">zip静态资源</a><!-- 触发保存 --><a href="https://www.7-zip.org/a/7z1900-x64.exe" download="test.zip" target="_blank">三方exe静态资源</a><!-- 直接打开 --><a href="/createQrCode?text=http://lxqnsys.com/" download target="_blank">二维码流</a><!-- 直接打开 --><a href="/getFileStream?name=test.jpg" download target="_blank">jpg流</a><!-- 触发保存 --><a href="/getFileStream?name=test.zip" download target="_blank">zip流</a><!-- 触发保存 --><a href="/getAttachmentFileStream?name=test.jpg" download target="_blank">附件jpg流</a><!-- 触发保存 --><a href="/getAttachmentFileStream?name=test.zip" download target="_blank">附件zip流</a>12345678910111213141516方法4:a标签方式类似的还可以使用location.href
这2、3种方式的缺点也很明显,一是不支持post等其他方式的请求,二是需要后端支持
location.href = '/test.jpg'1还有其他的下载方式可以参考原文链接!————————————————版权声明:本文为CSDN博主「i_am_a_div_日积月累_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/i_am_a_div/article/details/125050379

标签:前端,blog,href,new,download,pdf,document,下载
来源: https://www.cnblogs.com/wsj1/p/16700215.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有