我有这个:
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);
}
当我调用send函数时,我的服务器(firebase的云函数)没有 接收任何数据。我认为这是因为没有内容类型,并且服务器无法使用我发送的数据。
这就是为什么我需要内容类型。
对不起,我的英语不太好:/(我是法语)
答案 0 :(得分:1)
当我调用send函数时,我的服务器(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
,则会忽略body参数,并将请求正文设置为null。
内容类型可能无关紧要,但是如果要像这样在正文中发送数据,则需要使用POST
或PUT
。