2

私は、AngularJS で作業しているファイルを使用して少量の JSON をアップロードする必要があるプロジェクトに取り組んでいます。

Danial Farid の angular-file-upload を使用してコードを作成しましたが、動作していますが、常に「multipart/form-data、boundary=<whatever>」を送信します。

ただし、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);
});

ヘッダーが送信される直前に変更する方法はありますか?

彼のangular-file-uploadを使用していない場合は、別の方法で、できれば「自分のロール」機能を使用する必要はありませんか?

編集1:

この変更を行うのがいかに難しいか理解できません。もちろん追加できます

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

しかし、境界がないため、これはまったく何もしません。境界線を引き抜く方法がないのはなぜですか? 何かのようなもの

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

これをできるだけ早く機能させる必要があります。

4

1 に答える 1

6

もう待ちきれませんでした。私は自分自身を巻き上げてしまいましたが、うまくいきます。これがコードです...うまくいけば、他の人が恩恵を受けることができます。

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!");
});
于 2015-01-26T00:31:45.200 に答える