首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用AngularJS上传文件

使用AngularJS上传文件
EN

Stack Overflow用户
提问于 2013-09-02 10:29:52
回答 28查看 836.5K关注 0票数 307

以下是我的HTML表单:

代码语言:javascript
复制
<form name="myForm" ng-submit="">
    <input ng-model='file' type="file"/>
    <input type="submit" value='Submit'/>
</form>

我想从本地机器上传一个图像,并希望读取上传文件的内容。所有这些我都想用AngularJS来做。

当我试图打印$scope.file的值时,它是未定义的。

EN

回答 28

Stack Overflow用户

回答已采纳

发布于 2013-12-10 21:50:00

这里的一些答案建议使用FormData(),但不幸的是,这是Internet 9及更低版本中不可用的浏览器对象。如果您需要支持那些旧的浏览器,您将需要一个备份策略,例如使用<iframe>或Flash。

已经有许多Angular.js模块可以执行文件上传。这两种浏览器对旧浏览器都有明确的支持:

还有其他一些选择:

其中一个应该适合您的项目,或者可以让您了解如何自己编写代码。

票数 356
EN

Stack Overflow用户

发布于 2014-03-20 16:08:01

最简单的方法是使用HTML5 API,即FileReader

HTML非常简单:

代码语言:javascript
复制
<input type="file" id="file" name="file"/>
<button ng-click="add()">Add</button>

在控制器中定义'add‘方法:

代码语言:javascript
复制
$scope.add = function() {
    var f = document.getElementById('file').files[0],
        r = new FileReader();

    r.onloadend = function(e) {
      var data = e.target.result;
      //send your binary data via $http or $resource or do anything else with it
    }

    r.readAsBinaryString(f);
}

浏览器兼容性

桌面浏览器

Edge 12,Firefox(壁虎) 3.6(1.9.2),Chrome 7,Opera* 12.02,Safari 6.0.2

移动浏览器

Firefox(壁虎) 32,Chrome 3,Opera* 11.5,Safari 6.1

注意:不推荐使用readAsBinaryString()方法,而应该使用https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsArrayBuffer

票数 187
EN

Stack Overflow用户

发布于 2015-08-17 18:32:31

这是现代浏览器的方式,没有第三方图书馆。适用于所有最新的浏览器。

代码语言:javascript
复制
 app.directive('myDirective', function (httpPostFactory) {
    return {
        restrict: 'A',
        scope: true,
        link: function (scope, element, attr) {

            element.bind('change', function () {
                var formData = new FormData();
                formData.append('file', element[0].files[0]);
                httpPostFactory('upload_image.php', formData, function (callback) {
                   // recieve image name to use in a ng-src 
                    console.log(callback);
                });
            });

        }
    };
});

app.factory('httpPostFactory', function ($http) {
    return function (file, data, callback) {
        $http({
            url: file,
            method: "POST",
            data: data,
            headers: {'Content-Type': undefined}
        }).success(function (response) {
            callback(response);
        });
    };
});

HTML:

代码语言:javascript
复制
<input data-my-Directive type="file" name="file">

PHP:

代码语言:javascript
复制
if (isset($_FILES['file']) && $_FILES['file']['error'] == 0) {

// uploads image in the folder images
    $temp = explode(".", $_FILES["file"]["name"]);
    $newfilename = substr(md5(time()), 0, 10) . '.' . end($temp);
    move_uploaded_file($_FILES['file']['tmp_name'], 'images/' . $newfilename);

// give callback to your angular code with the image src name
    echo json_encode($newfilename);
}

js小提琴(仅前端) https://jsfiddle.net/vince123/8d18tsey/31/

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

https://stackoverflow.com/questions/18571001

复制
相关文章

相似问题

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