【问题标题】:Uploading blob with FormData, File content is empty使用 FormData 上传 blob,文件内容为空
【发布时间】:2013-12-04 21:47:25
【问题描述】:

我正在尝试在 chrome 上上传带有 FormData 的 blob。 我正在构建一个网络应用程序。 用户可以创建个人资料并选择头像,这是一个 img 标签。 当我尝试执行 ajax 请求时,我用图像构建了一个画布并在其上调用 toDataURL。 然后我使用这个函数将数据转换成二进制内容

    dataURItoBlob: function(dataURI) {
      var binary = atob(dataURI.split(',')[1]);
      var array = [];
      for(var i = 0; i < binary.length; i++) {
        array.push(binary.charCodeAt(i));
      }
      return new Blob([new Uint8Array(array)], {type: 'application/octet-stream'});
    }

创建 blob 后,我将其添加到 formData 并发送 ajax 查询(使用 jquery)。 问题是,文件的内容似乎是空的。

 ------WebKitFormBoundarysToAVAYMLPFfJF96
 Content-Disposition: form-data; name="image"; filename="avatar.png"
 Content-Type: application/octet-stream


 ------WebKitFormBoundarysToAVAYMLPFfJF96--

使用 FileReader 我在 blob 上执行 readAsText,它实际上有内容:

 �PNG


 IHDR�
 IDATx^���������v�"�`���^[l��N�����׸�k�؁�X�B�[�i�eٜ����yg����E�dF����o~���{�s�sN(�˲�_t�ɤ����݇ns(Z�6ڇ>�O}}��b��l�����ks�̱��r�w�}��{��x<޲}�Q644XNN�;޷�~k7�|��z��V[[�����o�����rss��WTTXII�UWW[^^^��455Yqq���Ը��ߏ>���Xc
 ���s��o��Yg�ew�y�566��...

有人遇到过这个问题吗? 我只是不明白为什么查询会发送一个空文件。

【问题讨论】:

  • Chrome 开发者工具实际上并没有在表单数据中显示文件的内容,您是否在服务器端脚本中得到了一个空文件?
  • 我不是开发服务器脚本的人。我会问服务器开发人员,但我认为你是对的。有没有办法让文件登录到开发人员工具中?无论如何,可以发表您的评论作为答案,以便我接受吗?

标签: ajax webkit blob form-data


【解决方案1】:

Chrome 开发者工具实际上并没有在表单数据中显示文件的内容,请检查服务器端看文件是否确实为空。 Firebug(firefox 插件)向您显示部分文件数据,您还可以使用fiddler 等工具查看 http 帖子正文。

【讨论】:

  • 此外,虽然 blob 是数据而不是(必然)文件,但它仍将作为文件上传服务器端到达。例如。在 PHP 中期望它作为 $_FILES 条目而不是 $_POST 条目。 (今天在 Chrome 开发工具中看不到它的组合花费了我几个小时..)
猜你喜欢
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 2011-10-03
  • 2017-06-14
  • 2017-08-30
  • 2017-05-14
  • 2018-03-28
  • 2022-11-08
相关资源
最近更新 更多