Хранилище Azure повреждает файлы после загрузки?

Я пытаюсь загрузить изображения в лазурное хранилище следующим образом:

var xhr = new XMLHttpRequest();
xhr.open("GET", blobUrl);
xhr.responseType = "text";//force the HTTP response, response-type header to be blob
xhr.onload = function () {
    blobService.createBlockBlobFromText('taskcontainer', 'myblob', xhr.responseText,  {contentSettings: {contentType: "image/bmp"}}, (error, result, response)=>{
    })
}
xhr.send();

Если я загружаю что-то простое, например текстовый файл с буквой «abc», он загружается нормально, однако, если я пытаюсь загрузить что-то вроде изображения, оно кажется поврежденным, diff показывает файл после того, как он был загружен на лазурь (слева) и до этого был загружен: https://user-images.githubusercontent.com/2121021/35678518-cb006af4-07a7-11e8-963d-2bb8b45aba26.png

Я не уверен, что именно происходит, и уже некоторое время пытаюсь решить эту проблему...


person meds    schedule 02.02.2018    source источник
comment
Может быть, это потому, что вы устанавливаете тип ответа как текст (xhr.responseType = "text") и читаете двоичное содержимое как текст?   -  person Gaurav Mantri    schedule 02.02.2018
comment
Размер responseText правильный для растрового изображения при его загрузке, после того, как он находится в лазурном хранилище, загруженный файл как-то больше, поэтому я не думаю, что это так.   -  person meds    schedule 02.02.2018


Ответы (1)


Ну, вам нужно установить responseType на arraybuffer при получении двоичных данных через объект XMLHttpRequest.

var xhr = new XMLHttpRequest();
xhr.open("GET", blobUrl);
xhr.responseType = "arraybuffer";
xhr.onload = function () {
    blobService.createBlockBlobFromText('taskcontainer', 'myblob', new Uint8Array(xhr.response),  {contentSettings: {contentType: "image/bmp"}}, (error, result, response) => {
    })
}
xhr.send();
person Aaron Chen    schedule 12.02.2018