2017-02-20 13 views
0

私は1.5の角度を使用しています。ファイルをアップロードするにはサービスをリクエストする必要があります。同じサービスでは、リクエスト本体としてJSONも渡す必要があります。同じリクエストで複数のタイプのコンテンツを送信する

Content-type: application/jsonファイルのマルチパートを使用していない場合、Content-type: undefinedを使用すると、マルチパートが動作しますが、JSONパラメータは機能しません。だから、私はのjsonのvaluemultipartとして設定できるような方法はありますか?これを行う方法は他にありますか?

おかげ

答えて

1

この方法のように、それを試してみて、あなたは罰金になります:

$scope.uploadMultipart = function(file, jsonObject, uploadUrl){ 
    var formData = new FormData(); 

    formData.append('json',JSON.stringify(jsonObject)); 
    formData.append('file', file); 

    return $http({ 
     url: uploadUrl, 
     method: 'POST', 
     data: formData, 
     headers: { 'Content-Type': undefined}, 
     transformRequest: angular.identity 
    }); 
}; 

は、私はそれをお勧めしますが、あなたはJSONオブジェクトの一部としてファイルを追加することができる方法のthatsないだろう。このようにして、コンテンツタイプapplication/jsonを転記することができます。

$scope.uploadHack = function(file, jsonObject, uploadUrl){ 

    var aReader = new FileReader(); 
    aReader.readAsText(file, "UTF-8"); 
    aReader.onload = function (evt) { 

     //append file to json as raw data 
     jsonObject.file = { 
      content: aReader.result, 
      name: file.name, 
      size: file.size 
     }; 

     $http({ 
      url: uploadUrl, 
      method: 'POST', 
      data: jsonObject, 
      headers: { 'Content-Type': 'application/json'}, 
      transformRequest: angular.identity 
     }); 
    } 
}; 
+0

はい。ここでは、stringartified jsonをmultipartに追加しています。反対の方法はありますか? JSONのマルチパートですか? –

+0

@AmirSuhailなぜこれをしたいですか?この種のマルチパート構造では、バックエンド処理(JSON.parse)さえも簡単です - https://en.wikipedia.org/wiki/KISS_principle – lin

+0

はい。しかし、バックエンドは、マルチパートを取得すると、サービスを呼び出す必要があります。上記の処理を行うと、データはリクエストボディとしてではなく、マルチパートのパラメータとして扱われます。リクエスト本体でデータを取得するには、その処理を行う必要があります。 –

関連する問題