JavaScript 图片下载

文件和图片的下载在后管系统中是常见功能,这里记录一些刚用的代码,方便后续使用

1,图片下载

对于图片下载,后端传给前端多为图片在数据库中的下载地址

// 附件下载

// row: 后端返回给你的图片数据,包括name和path
// new Date().getTime():获取当前时间的时间值,用于重命名图片
// this.fileBaseUrl:服务器下载图片的根地址

previewHandle(row) {
  let url = this.fileBaseUrl + '/' + row.path
  let xhr = new XMLHttpRequest()
  xhr.open('GET', url, true)
  xhr.responseType = 'blob'
  xhr.onload = () => {
      let blob = xhr.response
      var downloadElement = document.createElement('a')
      var href = window.URL.createObjectURL(blob) // 创建下载的链接
      downloadElement.href = href
      let temporary = row.path.split('.')[1]
      downloadElement.download = row.name ? new Date().getTime() + row.name : new Date().getTime() + '.' + temporary // 下载后文件名
      document.body.appendChild(downloadElement)
      downloadElement.click() // 点击下载
      document.body.removeChild(downloadElement) // 下载完成移除元素
      window.URL.revokeObjectURL(href) // 释放掉blob对象
  }
  xhr.onerror = (e) => {
      console.log(e, 'error')
  }
  xhr.send()
},

2,附件下载

对于附件下载,后端传给前端多为文件流,也不排除后端直接给你文件地址,两者之间的差距是文件流需要用new Blob() 进行处理文件流

// 如果有服务器地址,可以直接下载

    (1), 使用window.open(path),直接浏览器打开地址
    (2), 使用类型为download的a标签下载,href属性是文件的链接 download属性可以默认下载文件名称。
        <a href="/images/ww.exe" download="xx">下载</a>


// 如果后端传给前端的是文件流
    let dateStr = new Date().getTime()
    let pdfblob = new Blob([res.data], {type: 'application/pdf;charset=utf-8'})
    let downloadElement = document.createElement('a')
    let pdfhref = window.URL.createObjectURL(pdfblob) // 创建下载的链接
    downloadElement.href = pdfhref
    downloadElement.download = '试卷'+dateStr+'.zip' // 下载后文件名
    document.body.appendChild(downloadElement)
    downloadElement.click() // 点击下载
    document.body.removeChild(downloadElement) // 下载完成移除元素
    window.URL.revokeObjectURL(pdfhref) // 释放掉blob对象

PS:各种类型的type


'ppt'        => 'application/vnd.ms-powerpoint',
'dir'        => 'application/x-director',
'js'        => 'application/x-javascript',
'swf'        => 'application/x-shockwave-flash',
'xhtml'        => 'application/xhtml+xml',
'xht'        => 'application/xhtml+xml',
'zip'        => 'application/zip',
'mid'        => 'audio/midi',
'midi'        => 'audio/midi',
'mp3'        => 'audio/mpeg',
'rm'        => 'audio/x-pn-realaudio',
'rpm'        => 'audio/x-pn-realaudio-plugin',
'wav'        => 'audio/x-wav',
'bmp'        => 'image/bmp',
'gif'        => 'image/gif',
'jpeg'        => 'image/jpeg',
'jpg'        => 'image/jpeg',
'png'        => 'image/png',
'css'        => 'text/css',
'html'        => 'text/html',
'htm'        => 'text/html',
'txt'        => 'text/plain',
'xsl'        => 'text/xml',
'xml'        => 'text/xml',
'mpeg'        => 'video/mpeg',
'mpg'        => 'video/mpeg',
'avi'        => 'video/x-msvideo',
'xlsx'       => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'

附:下载xlsx完整的一个方法

exportPersonList() {
      // 数据请求参数
      let exportPersonListParams = {
        examId: this.dataForm.examId,
        personCode: this.dataForm.personCode,
        deptId: this.dataForm.deptId
      }
      // 获取token
      let token = this.$cookie.get('token')
      this.$http({
        url: this.$http.adornUrl(
          '/spring-processweb/xlkjExam/export'
        ),
        method: 'GET',
        headers: {
          'Content-Type': 'multipart/form-data',
          Authorization: token
        },
        // 很重要,必须加上responseType: 'blob',
        responseType: 'blob',
        params: exportPersonListParams
      }).then(({ data }) => {
        if (data) {
          var blob = new Blob([data], {
            type: 'application/vnd.openxmlformats-  officedocument.spreadsheetml.sheet;charset=utf-8'
          }) // type这里表示xlsx类型
          var downloadElement = document.createElement('a')
          var href = window.URL.createObjectURL(blob) // 创建下载的链接
          // window.open(href)
          downloadElement.href = href
          downloadElement.download = '人员列表.xlsx' // 下载后文件名
          document.body.appendChild(downloadElement)
          downloadElement.click() // 点击下载
          document.body.removeChild(downloadElement) // 下载完成移除元素
          window.URL.revokeObjectURL(href) // 释放掉blob对象
        }else {
          this.$message.error('导出失败')
        }
      })
      .catch(err => {
        this.$message.error(err.message || '导出失败')
      })
    },
    // 20230519添加:获取部门数据
    getBaseData () {
      departList().then(({ data }) => {
        if (data && data.code === 0) {
          this.departList = [data.data[0]] || []
        } else {
          this.$message.error(data.msg || '操作失败')
        }
      }).catch((err) => {
        this.$message.error(err.message)
      })
    },

记录结束,拜了个拜,迪迦。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值