Файл сохранен локально с FileSaver не открывается.

Я пытаюсь сохранить файл с помощью FileSaver, и "технически" он работает, я говорю "технически", потому что файл не открывается.

Чтобы проверить это, я создал новый файл, загрузил и попытался загрузить, все еще, когда я пытаюсь открыть загруженный файл, я получаю:

Я загружаю файл с Google Drive, используя:

_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 ответ

Решение

Проблема была связана с декодированием байтового массива (строки). Это была base64. Так что после расшифровки я смог заставить его работать.

Взято из СО:

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 });
Другие вопросы по тегам