文件保存在本地,但 FileSaver 未打开。

File saved locally with FileSaver not opening.

我正在尝试使用 FileSaver 保存文件并且 "technically" 它正在工作,我说 "technically" 因为文件无法打开。

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

我使用以下驱动器从 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);
    }
  });
}

关于我做错了什么有什么想法吗?

谢谢!

问题与字节数组(字符串)解码有关。这是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 });