我正在尝试使用下面的angular指令来支持IE9中的文件上传,但是我在从前端向我拥有的应用程序接口发出请求时遇到了问题。下面的代码适用于9以后的所有IE版本。
这是我正在进行的angular服务请求:
uploadFiles: function (data) {
angular.forEach(data.files, function (file) {
file.upload = Upload.upload({
url: fullUploadUrl,
data: { file: file }
});
file.upload.then(function (response) {
if (response.data.length > 0) {
console.log("Success")
} else {
console.log("Successish")
}
}, function (response) {
console.log("fail")
});
});
},以及我正在尝试实现的.net restful API:
[ResponseType(typeof(List<FileUploadBindingModel>))]
public async Task<IHttpActionResult> Post()
{
HttpPostedFile file = null;
foreach (string fileKey in HttpContext.Current.Request.Files)
{
file = HttpContext.Current.Request.Files[fileKey];
//Do things with files
}
}我还在接口和前端的路由目录中添加了以下策略文件(crossdomain.xml):
<?xml version="1.0" ?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>谁能指出我在这里遗漏了什么?请求会到达file.upload,但之后什么都不会发生。
关于一些半相关的信息:
这就是我如何将我使用的所有文件捆绑在一起:
bundles.Add(new ScriptBundle("~/js").Include(
"~/Assets/libs/jquery-{version}.js",
"~/Assets/libs/bootstrap.js",
"~/Assets/libs/google-analytics.js",
"~/Assets/libs/scrolling-nav.js",
"~/Assets/libs/AngularJS/angular.min.js",
"~/Assets/libs/AngularJS/angular-sanitize.js",
"~/Assets/libs/AngularJS/angular-resource/angular-resource.min.js",
"~/Assets/libs/AngularJS/angular-route/angular-route.min.js",
"~/Assets/libs/AngularJS/angular-ui/ui-bootstrap-tpls.min.js",
"~/Assets/libs/AngularJS/ng-file-upload/ng-file-upload-shim.js",
"~/Assets/libs/AngularJS/ng-file-upload/ng-file-upload.js",
"~/Assets/libs/AngularJS/angular-form-extension/*.js",
"~/Assets/libs/AngularJS/angular-local-storage.min.js",
"~/Assets/libs/AngularJS/angular-cookies/angular-cookies.js",
"~/Assets/libs/AngularJS/angular-translate/angular-translate.js",
"~/Assets/libs/AngularJS/angular-translate/angular-translate-cookie-storage.js",
"~/Assets/libs/AngularJS/angular-translate/angular-translate-local-storage.js",
"~/Assets/libs/AngularJS/angular-translate/angular-translate-loader-static-files.js",
"~/Assets/libs/AngularJS/angular-smooth-scroll.js"));前端和.net应用程序接口之间发出的请求使用令牌身份验证,因此每个请求都必须包含此令牌。上面的请求确实包含了这个。
包含所有相关文件的文件夹:

发送请求之前的文件:

发布于 2016-06-06 18:26:35
IE 9及更低版本不支持异步文件上传。这意味着Angular不能使用它的客户端优势在这些浏览器上上传文件。如果我没记错的话,我认为这是XmlHttpRequest对象的一个限制。
您需要为较旧的浏览器制定备份策略。
以下是两个显式支持较旧浏览器的选项:
https://github.com/leon/angular-upload -使用iframe作为后备
https://github.com/danialfarid/ng-file-upload -使用文件应用编程接口/闪存作为后备
https://stackoverflow.com/questions/37459431
复制相似问题