无法掌握FormData和ngResource

时间:2017-11-13 02:30:01

标签: angularjs 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标题不是1.6.4,所以我一直在直接从内容中读取字节,但我无法以这种方式获取文件名。

很明显,FormData实际上正在进行,因为我可以访问请求中的字节。

我已经看到其他答案/文档建议添加transformRequest函数,否则Content-Type默认为JSON。但是当我这样做时,该代码不会执行,因此服务器端的请求中缺少该文件。

我有点迷失在这里,希望有一个明显的理由说明1.3.1和1.6.4之间存在这种差异,有人可能会指出我。

编辑以添加请求标头:

接受:application / json,text / plain,* / *
Accept-Encoding:gzip,deflate,br
接受语言:EN-US,EN; Q = 0.9
连接:保持活跃
内容长度:31761
内容类型:应用/ JSON;字符集= UTF-8
主持人:本地主机:40981
起源:http://localhost:51609
引用者:http://localhost:51609/app/
User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 64.0.3266.0 Safari / 537.36

1 个答案:

答案 0 :(得分:1)

检查dev-tools中header request处的Network,这可能很有用。 如果不起作用,请粘贴header reuqest或许可以提供更多信息。