文件保存在本地保存文件无法打开。

时间:2016-06-19 22:49:14

标签: javascript typescript google-drive-api filesaver.js

我正在尝试使用FileSaver保存文件,“技术上”它正在运行,我说“技术上”因为文件无法打开。

为了测试它,我创建了一个全新的文件,上传并尝试下载,当我尝试打开下载的文件时,我得到了:

enter image description here

我使用以下方式从Google云端硬盘下载文件:

_service.Files.Export(fileId, type).ExecuteAsStream();

然后我将该流转换为byte []:

using (var ms = new MemoryStream())
{
    var stream = StorageService.GetStream(file.StorageId); //invoking previous code

    stream.CopyTo(ms);
    resource.Content = ms.ToArray(); //saves to view model
}

我的Javascript:

download(fileId: string): void {
  this.fileStore.download(fileId).then(function (file: StorageFile) {
    if (file) {
      let data = new Blob([file.content], { type: file.type });
      fileSaver.saveAs(data, file.title);
    }
  });
}

关于我做错什么的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

该问题与字节数组(字符串)解码有关。它是base64。因此,在解码之后,我能够使其正常工作。

取自SO:

let byteCharacters = atob(b64Data);
let byteArrays = [];

for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
  let slice = byteCharacters.slice(offset, offset + sliceSize);
  let byteNumbers = new Array(slice.length);

  for (let i = 0; i < slice.length; i++) {
    byteNumbers[i] = slice.charCodeAt(i);
  }

  let byteArray = new Uint8Array(byteNumbers);

  byteArrays.push(byteArray);
}

let blob = new Blob(byteArrays, { type: contentType });