#javascript #python-3.x #fetch-api
Вопрос:
Я просматривал множество других вопросов, задавая точно такие же вопросы. Но не смог заставить ни одного из них работать в моем случае.
В основном мне нужно извлечь gif-файл из API и отобразить его. Возвращаемое изображение представляет собой gif-изображение в кодировке base64, созданное, как показано ниже;
with io.BytesIO() as newfp:
....logic....
buf = base64.b64encode(newfp.getvalue()).decode()
return {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Content-Type",
"Content-Type": 'image/gif',
},
"body": buf,
"isBase64Encoded": True,
}
То, что я придумал, как показано ниже, основано на этой ссылке,
fetch('https://xxxxxxx.execute-api.us-west-2.amazonaws.com/v1/xxxx', {
method: 'POST',
body: ""
}).then((response) => {
response.arrayBuffer().then((buffer) => {
var base64Flag = 'data:image/gif;base64,';
var imageStr = arrayBufferToBase64(buffer);
var image = new Image();
image.src = base64Flag imageStr;
document.body.appendChild(image);
});
});
function arrayBufferToBase64(buffer) {
console.log(buffer);
var binary = '';
var bytes = [].slice.call(new Uint8Array(buffer));
bytes.forEach((b) => binary = String.fromCharCode(b));
return window.btoa(binary);
};
Ответ №1:
Решена проблема с помощью приведенного ниже кода.
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://xxxxx.execute-api.us-west-2.amazonaws.com/v1/xxxx");
xhr.responseType = "blob";
xhr.onload = response;
xhr.send();
function response(e) {
(this.response.text().then(imageStr => {
var base64Flag = 'data:image/gif;base64,';
var image = new Image();
image.src = base64Flag imageStr;
document.body.appendChild(image);
}));
}