首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ng-file-upload不支持IE9

ng-file-upload不支持IE9
EN

Stack Overflow用户
提问于 2016-05-26 19:21:57
回答 1查看 407关注 0票数 1

我正在尝试使用下面的angular指令来支持IE9中的文件上传,但是我在从前端向我拥有的应用程序接口发出请求时遇到了问题。下面的代码适用于9以后的所有IE版本。

这是我正在进行的angular服务请求:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    [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):

代码语言:javascript
复制
<?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,但之后什么都不会发生。

关于一些半相关的信息:

这就是我如何将我使用的所有文件捆绑在一起:

代码语言:javascript
复制
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应用程序接口之间发出的请求使用令牌身份验证,因此每个请求都必须包含此令牌。上面的请求确实包含了这个。

包含所有相关文件的文件夹:

发送请求之前的文件:

EN

回答 1

Stack Overflow用户

发布于 2016-06-06 18:26:35

IE 9及更低版本不支持异步文件上传。这意味着Angular不能使用它的客户端优势在这些浏览器上上传文件。如果我没记错的话,我认为这是XmlHttpRequest对象的一个限制。

您需要为较旧的浏览器制定备份策略。

以下是两个显式支持较旧浏览器的选项:

https://github.com/leon/angular-upload -使用iframe作为后备

https://github.com/danialfarid/ng-file-upload -使用文件应用编程接口/闪存作为后备

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37459431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档