我正在尝试使用以下角度指令来支持IE9中的文件上传,但是我遇到了从前端向API发出请求的问题。以下适用于9之后的所有IE版本。
这是我正在提出的角度服务请求:
import datetime
import time
from dateutil.rrule import rrule, MONTHLY
months = [dt.strftime("%m") for dt in rrule(MONTHLY, dtstart=date1, until=date2)]
print months
我试图点击的.net restful API:
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")
});
});
},
我还将以下策略文件(crossdomain.xml)添加到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
}
}
有谁可以指出我在这里缺少的东西?该请求使其达到file.upload,但没有任何反应。
关于一些半相关信息的更多信息:
这就是将我使用的所有文件捆绑在一起的方式:
<?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>
前端和.net api之间的请求使用令牌身份验证,因此每个请求都必须包含此令牌。上述请求确实包含此内容。
包含所有相关文件的文件夹:
发送请求之前的文件:
答案 0 :(得分:0)
IE 9及更低版本不支持异步文件上传。这意味着Angular无法使用其客户端优势在这些浏览器上上传文件。如果我没有弄错的话,我认为这是对XmlHttpRequest对象的限制。
您需要为旧版浏览器制定备份策略。
以下两个选项明确支持旧浏览器:
https://github.com/leon/angular-upload - 使用iframe作为后备广告
https://github.com/danialfarid/ng-file-upload - 使用FileAPI / Flash作为后备支持