无法掌握 FormData 和 ngResource
Can't get the hang of FormData and ngResource
我正在尝试通过 AngularJS 1.6.4 将文件上传为 MIME/multipart,然后将其发送到 ASP.Net WebAPI。我引用了一个使用版本 1.3.1 的示例项目,其中工作如下:
var formData = new FormData();
angular.forEach(photos, function (photo) {
formData.append(photo.name, photo);
});
return photoManagerClient.save(formData)
.$promise
.then(function (result) {
if (result && result.photos) {
result.photos.forEach(function (photo) {
if (!photoExists(photo.name)) {
service.photos.push(photo);
}
});
}
.
.
.
function photoManagerClient($resource) {
return $resource("api/photo/:fileName",
{ id: "@fileName" },
{
'save': { method: 'POST', transformRequest: angular.identity, headers: { 'Content-Type': undefined } }
});
}
我无法使用 1.6.4 使它正常工作,而且我找不到原因。 MIME/multipart header 1.6.4 没有,所以我一直直接从内容中读取字节,但我无法通过这种方式获取文件名。
很明显,FormData 实际上已经通过了,因为我可以访问请求中的字节。
我看到其他 answers/docs 建议添加一个 transformRequest 函数,否则 Content-Type 默认为 JSON。但是当我这样做时,该代码不会执行,因此服务器端的请求中缺少该文件。
我在这里有点迷茫,希望有人能指出 1.3.1 和 1.6.4 之间的这种差异的明显原因。
编辑以添加请求 headers:
接受:application/json、text/plain、*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.9
Connection:keep-活着
Content-Length:31761
Content-Type:application/json;字符集=utf-8
Host:localhost:40981
来源:http://localhost:51609
推荐人:http://localhost:51609/app/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3266.0 Safari/537.36
检查开发工具中 Network
处的 header request
,也许有用。
如果不起作用,粘贴 header reuqest
也许可以提供更多信息。
我正在尝试通过 AngularJS 1.6.4 将文件上传为 MIME/multipart,然后将其发送到 ASP.Net WebAPI。我引用了一个使用版本 1.3.1 的示例项目,其中工作如下:
var formData = new FormData();
angular.forEach(photos, function (photo) {
formData.append(photo.name, photo);
});
return photoManagerClient.save(formData)
.$promise
.then(function (result) {
if (result && result.photos) {
result.photos.forEach(function (photo) {
if (!photoExists(photo.name)) {
service.photos.push(photo);
}
});
}
.
.
.
function photoManagerClient($resource) {
return $resource("api/photo/:fileName",
{ id: "@fileName" },
{
'save': { method: 'POST', transformRequest: angular.identity, headers: { 'Content-Type': undefined } }
});
}
我无法使用 1.6.4 使它正常工作,而且我找不到原因。 MIME/multipart header 1.6.4 没有,所以我一直直接从内容中读取字节,但我无法通过这种方式获取文件名。
很明显,FormData 实际上已经通过了,因为我可以访问请求中的字节。
我看到其他 answers/docs 建议添加一个 transformRequest 函数,否则 Content-Type 默认为 JSON。但是当我这样做时,该代码不会执行,因此服务器端的请求中缺少该文件。
我在这里有点迷茫,希望有人能指出 1.3.1 和 1.6.4 之间的这种差异的明显原因。
编辑以添加请求 headers:
接受:application/json、text/plain、*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.9
Connection:keep-活着
Content-Length:31761
Content-Type:application/json;字符集=utf-8
Host:localhost:40981
来源:http://localhost:51609
推荐人:http://localhost:51609/app/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3266.0 Safari/537.36
检查开发工具中 Network
处的 header request
,也许有用。
如果不起作用,粘贴 header reuqest
也许可以提供更多信息。