Файл сохранен локально с 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 });