【问题标题】:Cloudinary Base64 Image uploading in angularjsCloudinary Base64图像在angularjs中上传
【发布时间】:2014-08-09 12:58:29
【问题描述】:
$http({method: 'POST', 
    url: $rootScope.CLOUDINARY_CONFIG.upload_url,
    data : {
      file : canvasImage,
      resource_type : 'image',
      format: "jpg",
      timestamp : 1375363550,
      api_key : $rootScope.CLOUDINARY_CONFIG.api_key,
      signature : signature,
      public_id : scope.model.public_id
    },
    headers : {"X-Requested-With": "XMLHttpRequest", "Content-Type" : "multipart/formData"}

    }).success(function(data, status, headers, config) {
          console.log("success");
    }).error(function(data, status, headers, config) {
          console.log("fail");
    });

我正在尝试将 base64 图像上传到 cloudinary 帐户。我已经检查了签名、api key、上传url和canvasImage是否正确。 然而,无论何时发送请求,

我收到一个错误响应:

 {"error":{"message":"Missing required parameter - file"}}

在检查请求负载时,我可以看到正在传递的文件参数。

canvasImage 是 base64 jpg。排序 - data:image/jpeg;base64,/9j/4AAQSkZJRgABA。

在 cloudinary 文档中找不到此类内容。

【问题讨论】:

    标签: javascript angularjs cloudinary


    【解决方案1】:

    首先,查看 FormData 对象。如果您要上传多部分表单数据,则需要使用它。

    基本上,FormData 对象允许您使用它具有的唯一函数追加文件、blob 和字符串(如果您附加的内容不属于这三者,它将对其进行字符串化),即 append ie:

    var newForm = new FormData();
    
    newForm.append('fileName', file);
    newForm.append('api_key', $rootScope.CLOUDINARY_CONFIG.api_key);
    newForm.append('signature', signature);
    newForm.append(public_id, scope.model.public_id);
    

    等等..

    下一步。

    将您的内容类型设置为未定义而不是多部分表单数据。这似乎不直观,然而,浏览器会自动为您设置适当的边界,并将内容类型自动设置回 multipart/formdata。

    另外,将一个 transformRequest 添加到 angular.identity 的配置中。浏览器会尝试序列化您的表单数据,因此您需要通过将 transformRequest 设置为 angular.identity 来阻止它这样做。

    整个 $http 请求应该如下所示:

    $http.post(url, newForm, {
      transformRequest: angular.identity,
      headers: {'Content-Type': undefined}
    })
    .success(function(data){
      // success
    })
    .error(function(err){
      // log error
    })
    

    还要注意 FormData 很难处理你,因为如果你控制你的 FormData 对象,即(console.log(newForm)) 它会显示的只是:FormData {append: function}

    【讨论】:

    • 给出了 401 错误(无效签名),尽管我检查过并且我得到了正确的签名。所以我将 Content-type 设置为 false,然后再次返回 400 错误,提到缺少文件参数。
    猜你喜欢
    • 2014-07-23
    • 2020-05-02
    • 2021-03-20
    • 2020-03-02
    • 2016-02-02
    • 2015-02-21
    • 2017-07-12
    • 2017-12-02
    • 2014-11-25
    相关资源
    最近更新 更多