Javascript 计算formdata编码开销-多部分/表单数据(RFC 2388)
当根据(Javascript 计算formdata编码开销-多部分/表单数据(RFC 2388),javascript,html,Javascript,Html,当根据(multipart/form data)对3字节字符串“ABC”进行编码时,由例如XMLHttpRequest发送的formdata由于编码而比3字节大得多 此外,当一个100字节的文件被编码为formdata(multipart/formdata)时,由于编码的原因,实际发送的字节数约为300字节。 这是正常的,因为此编码的键/值对的头和分隔符占用空间,以及文件名等 问题:未定义formdata.size时,如何计算此编码大小 下面是我试图通过从整个编码的formdata本身的大小中减
multipart/form data
)对3字节字符串“ABC”进行编码时,由例如XMLHttpRequest
发送的formdata
由于编码而比3字节大得多
此外,当一个100字节的文件被编码为formdata
(multipart/formdata
)时,由于编码的原因,实际发送的字节数约为300字节。这是正常的,因为此编码的键/值对的头和分隔符占用空间,以及文件名等 问题:未定义
formdata.size
时,如何计算此编码大小
下面是我试图通过从整个编码的formdata
本身的大小中减去formdata
中包含的原始对象大小之和来计算此开销
计算间接费用
,
不,在我看来,客户端没有这样的机制。它应该通过交替使用Blob/BufferSource来满足您的需求。FormData以键/值格式封装数据,这通常会导致超出您预期的一些“开销”。
XMLHttpRequest
的ProgressEvent
包含一个名为total
的只读属性,该属性似乎包含编码的FormData
的大小,…但是,如果不实际发送数据,则不可能调用此事件。
function SumOfObjects(formdata) {
var size = 0;
for(var pair of formdata.entries()) {
if (pair[1] instanceof Blob)
size += pair[1].size;
else
size += pair[1].length;
}
return size;
}
function clickMe() {
var formdata = new FormData(document.getElementById("myForm"));
alert("Bytes taken by all raw objects= " + SumOfObjects(formdata) );
alert("Bytes taken by the encoded formdata= " + formdata.size); //encoded as multipart/form-data (RFC 2388) - DOES NOT WORK !
alert("Bytes of encoding Overhead= " + formdata.size - SumOfObjects(formdata) );
}