2017-02-20 103 views
0

我正在使用angular 1.5,並且必須點擊服務才能上傳文件。在同一個服務中,我也必須傳遞一個JSON作爲請求體。在同一請求中發送多種類型的內容

當我使用Content-type: application/json多部分文件不工作,如果我使用Content-type: undefined然後多部分將工作,但JSON參數將無法正常工作。那麼有沒有什麼辦法像我可以將的key-value一對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

是的。這裏我們將追加一個stringifyed的json到multipart。有沒有相反的方式? JSON中的多部分? –

+0

@AmirSuhail爲什麼要這樣做?即使是後端處理(JSON.parse),使用這種多部分結構也更容易 - https://en.wikipedia.org/wiki/KISS_principle – lin

+0

是的。但後端在獲得多部分時不得不調用某些服務。如果我們做到上述那樣,數據將作爲多部分參數,而不是作爲請求主體。要獲取請求正文中的數據,我需要這樣做。 –

相關問題