У меня есть конечная точка API, к которой я должен отправить многостраничный HTTP-запрос, состоящий из двух частей: file
(файл файловой системы) и data
(объект JSON).
После некоторых исследований я узнал, как сделать многостраничный запрос в AngularJS:
$http({
method: 'POST',
url: url,
headers: {
'Content-Type': 'multipart/form-data'
},
data: {
data: model,
file: file
},
transformRequest: customFormDataObject
});
1) Функция customFormDataObject
первоначально имела следующую форму:
customFormDataObject formDataObject = function (data, headersGetter) {
var fd = new FormData();
angular.forEach(data, function (value, key) {
fd.append(key, value);
});
var headers = headersGetter();
delete headers['Content-Type'];
return fd;
};
Результат этой реализации состоит в том, что отдельные части запроса не имеют для них contentType
.
2). Прочитав еще несколько (qaru.site/info/277357/...), я попытался использовать Blob для этого, объект customFormData
выглядит следующим образом (немного беспорядок, в основном первая часть будет contentType
application/json
, вторая image/png
):
customFormDataObject = function (data, headersGetter) {
var fd = new FormData();
var contentType = 'application/json';
angular.forEach(data, function (value, key) {
fd.append(key, new Blob([JSON.stringify(value)], {
type: contentType
}));
contentType = 'image/png';
});
var headers = headersGetter();
delete headers['Content-Type'];
return fd;
};
Этот второй подход устанавливает правильную contentType
для каждой части запроса, но не устанавливает значения для частей.
В основном, что происходит с 1), правильные значения задаются в multiparts, но contentType
не установлены. С 2) установлены contentType
, но не значения для множителей.
Я что-то упустил? Эта функция не должна работать так?
Спасибо!