【问题标题】:AngularJS how to send multipart/mixedAngularJS如何发送多部分/混合
【发布时间】:2015-01-25 04:38:42
【问题描述】:

我正在做一个项目,我必须在 AngularJS 中使用文件上传一小部分 JSON。

我使用 Danial Farid 的 angular-file-upload 编写了代码,它可以正常工作,但它总是发送“multipart/form-data, boundary=

但是,我必须使用 multipart/mixed。

这是我的电话:

$scope.upload = $upload.upload({
  url: <my url>,
  method: 'POST',
  data: $scope.data,
        file: file,
}).progress(function(evt) {
  console.log('percent: ' + parseInt(100.0 * evt.loaded / evt.total));
}).success(function(data, status, headers, config) {
  // file is uploaded successfully
  console.log(data);
});

有没有办法在发送前修改标题?

如果不使用他的角度文件上传,那么通过另一种方法,希望不必“滚动我自己的”功能?

编辑 1:

我只是无法理解为什么要做出这样的改变会如此困难。当然可以加

headers: {'Content-Type': 'multipart/mixed'}

但这绝对没有任何作用,因为没有边界。为什么不能有办法把边界拉出来?类似的东西

headers: {'Content-Type': 'multipart/mixed, boundary=%b'}

我需要尽快完成这项工作。

【问题讨论】:

    标签: javascript angularjs angular-file-upload


    【解决方案1】:

    我已经等不及了。我最终推出了自己的产品,它确实有效。这是代码...希望其他人可以受益。

    file_contents 是 reader.readAsArrayBuffer($scope.files[0]);的输出

    您需要从序言文本、文件数据和页脚构建一个 blob,否则将二进制数据附加到字符串会对二进制文件数据进行转换,并且无法正常工作。

    var epochTicks = 621355968000000000;
    var ticksPerMillisecond = 10000;
    var yourTicks = epochTicks + ((new Date).getTime() * ticksPerMillisecond);
    
    var boundary='---------------------------'+yourTicks;
    
    var header="--"+boundary+"\r\n";
    
    var footer="\r\n--"+boundary+"--\r\n";
    
    var contenttype="multipart/mixed; boundary="+boundary;
    
    var contents=header+"Content-Disposition: form-data; name=\"json\"\r\n";
    contents+="Content-Type: application/json\r\n";
    contents+="Content-Length: "+JSON.stringify(data).length+"\r\n\r\n";
    contents+=JSON.stringify(data)+"\r\n";
    
    contents+=header+"Content-Disposition: form-data; name=\"image\"; filename=\""+$scope.files[0].name+"\"\r\n";
    contents+="Content-Transfer-Encoding: binary\r\n";
    contents+="Content-Type: "+$scope.files[0].type+"\r\n";
    contents+="Content-Length: "+$scope.files[0].size+"\r\n\r\n";
    
    blob=new Blob([contents,file_contents,footer]);
    
    $http.post(restUrl+"user/avatar/uploadAvatar",blob,{'headers':{'Content-Type':contenttype}}).
    success(function (data, status, headers, config) {
      alert("success!");
    }).
    error(function (data, status, headers, config) {
      alert("failed!");
    });
    

    【讨论】:

    • 100 多亏了你,伙计。我已经尝试了 2-3 周但没有运气,通过尝试你的解决方案,一次尝试就解决了......
    • 我什至也发布了一个问题。 stackoverflow.com/questions/31829025/…
    • 太棒了!很高兴我能帮上忙!
    • 它不起作用。我正在尝试发布 IMAGE 元信息和图像文件,您能帮帮我吗?
    • 一个 transformRequest 可以用更少的代码解决你的问题:docs.angularjs.org/api/ng/service/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 2013-10-11
    • 1970-01-01
    • 2013-02-06
    • 2020-09-24
    相关资源
    最近更新 更多