以流的方式下载文件、以及上传文件

封装的axios下载

// 下载数据
export const downloadFile = (id) => {
  return axios.request({
    url: '/file-manage/file/download/' + id,
    method: 'get',
    responseType: 'blob'
  })
}

传入下载的文件名,对应的文件id来下载流格式的文件

    // 下载文件
    downloadFile (filename, id) {
      downloadFile(id).then(res => {
        console.log(res)
        if (!res) {
          return
        }
        let url = window.URL.createObjectURL(res.data)
        let link = document.createElement('a')
        link.style.display = 'none'
        link.href = url
        link.setAttribute('download', filename)
        document.body.appendChild(link)
        link.click()
      }).catch(err => {
        console.log(err.message)
      })
    },

 上传

// 上传文件
  upData(data) {
    return axios.request({
      url: '/file-manage/file/import',
      method: 'post',
      data,
      headers: { 'form-data': 'multipart/form-data', Authorization: Cookies.get('accessToken') }
    })
  }

 页面代码

 <input type="file" class="file" style="display: none" @change="getFile" />
 <button class="ioc-button i-mini i-warning" style="margin-left: 5px" @click="exportFile">
        导出
 </button>
    // 上传文件
    importFile() {
      document.querySelector('input[type=file]').click()
    },
    // 获取文件
    getFile() {
      const formData = new window.FormData()
      const files = document.querySelector('input[type=file]').files
      formData.append('file', files[0])
      // Todo
      // 网络请求传递formData
    upData(formData) 
},

 地址下载

const downloadRes = async (url, name) => {
  let response = await fetch(url); // 内容转变成blob地址
  let blob = await response.blob();  // 创建隐藏的可下载链接
  let objectUrl = window.URL.createObjectURL(blob);
  let a = document.createElement('a');
  a.href = objectUrl;
  a.download = name;
  a.click()
  a.remove();
}

let url = document.querySelector('video').currentSrc
let name = '视频';
downloadRes(url, name).then()

 blob方式

          // 另一种
          let binaryData = [];
          binaryData.push(xhr.response);
          let url = window.URL.createObjectURL(new Blob(binaryData))
          let link = document.createElement('a')
          link.style.display = 'none'
          link.href = url
          link.setAttribute('download', '图片' + i + '.jpeg')
          document.body.appendChild(link)
          link.click()
          link.remove()

 

posted @ 2019-06-16 13:00  ronle  阅读(1268)  评论(0编辑  收藏  举报