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

Safari browsers sends blob/datauri as string in Node.js

本文关键字:datauri 字符串 blob 浏览器 Node js 中将 Safari      更新时间:2023-09-26

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

通过ajax发送用户数据。

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;
    }
  }

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

嗯,根据这个问题,您需要使用iabuffer属性,而不仅仅是[ia]。而不是

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

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