vue 下载文件

284 阅读1分钟
 downloadWithStream (list) {
      /**
     * @param {object[]} list
     * @param {string} list[].name
     * @param {string} list[].url
     * 通过流下载
     */
      list.forEach(async ({ url, name }) => {
        const fileStream = await this.$axios.get(url, {
          responseType: 'blob',
          withCredentials: false
        }).catch(() => {
          return false;
        });
        if (!fileStream) {
          return false;
        }
        const result = new Promise((resolve, reject) => {
          // const file = new FileReader();
          // file.readAsDataURL(fileStream.data);
          // file.onload = function () {
          const url = URL.createObjectURL(fileStream.data);
          const aLink = document.createElement('a');
          aLink.style.display = 'none';
          aLink.href = url;
          aLink.setAttribute('download', name);
          document.body.appendChild(aLink);
          aLink.click();
          document.body.removeChild(aLink); // 下载完成移除元素
          URL.revokeObjectURL(url);
          resolve(true);
          // };
        });
        return result;
      });
    },
    async downloadWithFiles (list) {
      /**
     * @param {object[]} list
     * @param {string} list[].name
     * @param {string} list[].url
     * 通过流下载 ,单个文件的下载
     */
      const fileStream = await this.$axios.get(list.url, {
        responseType: 'blob',
        withCredentials: false
      }).catch(() => {
        return false;
      });
      if (!fileStream) {
        return false;
      }
      const result = new Promise((resolve, reject) => {
        // const file = new FileReader();
        // console.log(typeof fileStream.data);
        // console.log(fileStream.data);
        // file.readAsDataURL(fileStream.data);
        // file.onload = function () {
        const url = URL.createObjectURL(fileStream.data);

        const aLink = document.createElement('a');
        aLink.style.display = 'none';
        aLink.href = url;
        aLink.setAttribute('download', list.name);
        aLink.click();
        URL.revokeObjectURL(url);
        resolve(true);
        // };
      });
      return result;
    }
  }