Загрузка поврежденного файла из хранилища BLOB-объектов Azure с помощью FileSaver.js

У меня есть электронная таблица Excel в Azure, которую я открываю с помощью SAS, и после загрузки она говорит, что файл поврежден. Вот код для сохранения и uri

var result : any= {};
result.fileUri =
    "https://mystorageaccount.blob.core.windows.net/market-files/33b55b3c-8997-405c-af31-33f6f3e79daf?sv=2016-05-31&sr=b&sig=5Xw%2F4UPcdXbXrxd4mIcZUPQX%2FZzVZfDTQoTfr5V6NTY%3D&st=2017-03-16T18%3A00%3A12Z&se=2017-03-17T18%3A05%3A12Z&sp=rw";

this.http.get(result.fileUri).subscribe(
             (response: any) => {
                                 var mediaType = 'application/octet-stream';
                                 var blob = new Blob([response._body], { type: mediaType });
                                 var filename = 'test.xlsx';
                                 saveAs(blob, filename);
            });

Файл загружается с правильным именем, но когда я его открываю, я получаю сообщение об ошибке в Excel о том, что файл поврежден.


person Isaac Levin    schedule 16.03.2017    source источник


Ответы (1)


Я не эксперт в Angular2, но я считаю, что тело ответа должно быть преобразовано в arraybuffer. О том, как с этим бороться, вы можете прочитать этот пост на SO.

Вот пример скачивания файла из хранилища BLOB-объектов Azure с помощью обычного Javascript и FileSaver.js.

var fileUri = "https://storageaccount.blob.core.windows.net/market-files/<bolbNameAndSAS>";
var oReq = new XMLHttpRequest();
oReq.open("GET", fileUri, true);
oReq.responseType = "arraybuffer";

oReq.onload = function(oEvent) {
    var blob = new Blob([oReq.response], {type: "application/octet-stream"});
    var filename = 'test.xlsx';
    saveAs(blob, filename);
};

oReq.send();
person Aaron Chen    schedule 17.03.2017