2017-02-20 5 views
0

Я использую угловое значение 1.5, и мне нужно нажать на службу, чтобы загрузить файл. В той же службе я должен передать JSON в качестве тела запроса.Отправка нескольких типов содержимого по одному и тому же запросу

Когда я использую Content-type: application/json multipart для файла не работает, если я использую Content-type: undefined, тогда multipart будет работать, но параметр JSON не будет работать. Итак, есть ли способ, как я могу установить value пары json как key-value как 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

Да. Но бэкэнд должен вызывать somethere обслуживание, когда он получает multipart. Если мы сделаем вышеописанное, данные будут представлены как множественные параметры, а не как тело запроса. Чтобы получить данные в теле запроса, мне нужно это сделать. –