Какой тип контента для изображения base64? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть это:

function base64ToBlob(base64, mime) 
{
    mime = mime || '';
    var sliceSize = 1024;
    var byteChars = window.atob(base64);
    var byteArrays = [];

    for (var offset = 0, len = byteChars.length; offset < len; offset += sliceSize) {
        var slice = byteChars.slice(offset, offset + sliceSize);

        var byteNumbers = new Array(slice.length);
        for (var i = 0; i < slice.length; i++) {
            byteNumbers[i] = slice.charCodeAt(i);
        }

        var byteArray = new Uint8Array(byteNumbers);

        byteArrays.push(byteArray);
    }

    return new Blob(byteArrays, {type: mime});
}


function send() {
    let blob = base64ToBlob(picture, "image/jpeg");
    let formData = new FormData();
    formData.append("picture", blob)
    formData.append("a", 70)
    formData.append("b",  5)
    
    var request = new XMLHttpRequest();
    request.open("GET", "server/far/away/that/need/content-type");
    request.setRequestHeader("Content-type", "HELP HERE")
    request.send(formData);
}

Когда я вызываю функцию отправки, мой сервер (облачная функция для firebase) не получает никаких данных.Я думаю, это потому, что нет типа контента, и сервер не может использовать данные, которые я отправляю.

Вот почему мне нужен тип контента.

Извините, мой английский не идеален: / (Я француз)

1 Ответ

1 голос
/ 25 сентября 2019

Когда я вызываю функцию отправки, мой сервер (облачная функция для firebase) не получает никаких данных.

Это потому, что вы используете неправильный метод HTTP.У GET нет тела, но это тело, куда вы отправляете данные:

var request = new XMLHttpRequest();
request.open("GET", "server/far/away/that/need/content-type");
//           ^^^^----------------------------------------------- method
request.setRequestHeader("Content-type", "HELP HERE")
request.send(formData);
//           ^^^^^^^^------------------------------------------- request body

От MDN :

send() принимаетнеобязательный параметр, который позволяет вам указать тело запроса;это в основном используется для запросов, таких как PUT.Если метод запроса имеет значение GET или HEAD, параметр тела игнорируется, а тело запроса устанавливается равным нулю.

Тип содержимого, вероятно, не имеет большого значения, но если выотправляете данные в теле таким образом, вам нужно использовать POST или PUT.

...