Safari浏览器在Node.js中将blob / datauri作为字符串发送

时间:2015-07-09 03:34:49

标签: javascript node.js blob data-url

我正在尝试接收通过AJAX发送的文件。发生的事情是,当使用Chrome / Firefox发送文件时,文件会转到req.files,但是当使用Safari发送文件时,文件会转到req.params。应用程序将文件视为字符串" [Object blob]"。感谢。

通过ajax发送userdata。

updatePartnerProfile: function(obj){
      var parentObj = this;
      var target = $(obj.target);
      var parent = target.closest('#editPartnerDetailsForm');
      var logoImg = parent.find('.cropped');
      var companyLogoBase64 = logoImg.find('.croppedImage').attr('src');
      var companyLogo = util.dataURItoBlob(companyLogoBase64);

      var userData = new FormData();
      userData.append('token', parentObj.token);
      userData.append('companyLogo', companyLogo);
      $.ajax({
        type: 'POST',
        url: parentObj.serverUrl + 'api/admin/update/organization/' + parentObj.partnerId,
        processData: false,
        contentType: false,
        cache: false,
        data: userData,
        success: function(data){
          //todo
          }
        },
        error: function(err){
          console.log(err);
        }
      });
    },

dataURItoBlob : function(dataURI) {
  // convert base64/URLEncoded data component to raw binary data held in a string
  if (!_.isUndefined(dataURI)){
    var byteString;
    if (dataURI.split(',')[0].indexOf('base64') >= 0)
      byteString = atob(dataURI.split(',')[1]);
    else
      byteString = unescape(dataURI.split(',')[1]);
      // separate out the mime component
      var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
      // write the bytes of the string to a typed array
      var ia = new Uint8Array(byteString.length);
      for (var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
      }
    return new Blob([ia], {type:mimeString});
    } else {
      return null;
    }
  }

我在代码中遗漏了什么吗?

1 个答案:

答案 0 :(得分:0)

好吧,as per this question,您需要使用buffer的{​​{1}}属性,而不仅仅是ia。而不是

[ia]

return new Blob([ia], {type:mimeString});