2017-02-20 11 views
0

나는 1.5 각도를 사용하고 있으며 파일을 업로드하려면 서비스를해야합니다. 동일한 서비스에서 JSON을 요청 본문으로 전달해야합니다.동일한 요청으로 여러 유형의 콘텐츠 보내기

Content-type: application/json 파일의 멀티 파트가 작동하지 않는 경우 Content-type: undefined을 사용하면 멀티 파트가 작동하지만 JSON 매개 변수는 작동하지 않습니다. 그렇다면 쌍의 json을 multipart으로 설정할 수있는 방법이 있습니까? 아니면 다른 방법이 있나요?

감사

답변

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 개체의 일부로 파일을 추가 할 수있는 방법을 먹으 렴 않을 것이다 . 그렇게하면 콘텐츠 유형 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

예. 여기에서는 문자열 화 된 json을 multipart에 추가합니다. 그 반대의 방법이 있습니까? JSON의 멀티 파트? –

+0

@AmirSuhail 왜 이것을하고 싶습니까? 이러한 종류의 멀티 파트 구조를 사용하면 백엔드 처리 (JSON.parse)가 훨씬 쉽습니다. https://en.wikipedia.org/wiki/KISS_principle – lin

+0

예. 하지만 백엔드는 여러 부분으로 나뉘어 서비스를 요청해야합니다. 위의 작업을 수행하면 데이터가 요청 본문이 아닌 다중 부분 매개 변수로 전달됩니다. 요청 본문에서 데이터를 가져 오려면 해당 작업을 수행해야합니다. –