【问题标题】:XMLHttpRequest content-length is not equal to the file actual sizeXMLHttpRequest content-length 不等于文件实际大小
【发布时间】:2015-04-05 02:39:25
【问题描述】:

我正在尝试使用 XMLHttpRequest 将文件(图像)上传到我的服务器端,好吧,我在发送前检查文件大小并检查我的请求标头上的内容长度,它们不一样,这里是代码:

var file = 'someFile'; 
var readers = new FileReader();
readers.readAsBinaryString(file);
readers.onload = (function(theFile) {
  return function(e) {                     
       var myData =  e.target.result;
       console.log(myData.length); // this output is 5548
       var xhr = new XMLHttpRequest();
       xhr.open("POST", url, true);
       xhr.setRequestHeader('Content-Type', 'application/octet-stream;');
       // send the collected data as JSON
       xhr.send(myData );
       xhr.onloadend = function () {
          // done               
       };
  })(file);

当我查看我的标头请求中的内容长度时,我发现长度大于实际大小,例如 ~7500,

如何确保请求文件数据与文件的实际大小相同?

【问题讨论】:

    标签: javascript ajax json file-upload xmlhttprequest


    【解决方案1】:

    当您发送文件内容时,它通常以 base64 编码的字符串形式发送。这增加了大约 30% 的请求大小。因此

    console.log(myData.length); // this output is 5548

    不是文件的大小而是它的长度。你可以使用File.name

    【讨论】:

    • ,,,, thx for the replay ,,, 我怎样才能将数据从 base64_encoded 转换为任何其他类型,以便大小与实际大小相同?
    • 你不能。典型文件包含 JSON 中不允许的字符。这就是它被转换为base64字符串的原因。
    • 但是。等待你没有将它作为 JSON 发送。您使用“应用程序/八位字节流;”内容类型。尝试以这种方式上传文件stackoverflow.com/questions/166221/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多