gpt4 book ai didi

angularjs - AngularJS的多部分请求

转载 作者:行者123 更新时间:2023-12-03 12:06:33 25 4
gpt4 key购买 nike

我有一个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)在阅读了更多内容( https://stackoverflow.com/a/24535293/689216)之后,我尝试使用 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)在多部分中设置了正确的值,但未设置 contentType。使用 2)会设置 contentType,但不会设置多部分的值。

我想念什么吗?该功能不应该这样工作吗?

谢谢!

最佳答案

在Angular中上传文件的最简单方法是:

var fd = new FormData();
fd.append('file', file);
fd.append('data', 'string');
$http.post(uploadUrl, fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
})
.success(function(){
})
.error(function(){
});

config对象的以下两个属性绝对必要:
transformRequest: angular.identity

覆盖Angular的默认序列化,使我们的数据保持不变。
headers: {'Content-Type': undefined }

让浏览器将正确的 Content-Type检测为 multipart/form-data,并填写正确的边界。

没有其他为我工作!由Louthan夫人的 wonderful blogpost提供。

关于angularjs - AngularJS的多部分请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28902727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com