当前位置: 首页 > 知识库问答 >
问题:

使用AngularJS上传文件

澹台新知
2023-03-14

这是我的超文本标记语言形式:

<form name="myForm" ng-submit="">
    <input ng-model='file' type="file"/>
    <input type="submit" value='Submit'/>
</form>

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

当我试图打印$scope的值时。文件它是未定义的。

共有3个答案

伊飞光
2023-03-14

这是一种现代浏览器方式,没有第三方库。适用于所有最新的浏览器。

 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);
        });
    };
});

超文本标记语言:

<input data-my-Directive type="file" name="file">

PHP:

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 fiddle(仅前端)https://jsfiddle.net/vince123/8d18tsey/31/

袁秦迟
2023-03-14

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

HTML非常简单:

<input type="file" id="file" name="file"/>
<button ng-click="add()">Add</button>

在控制器中定义“添加”方法:

$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(Gecko)3.6(1.9.2)、Chrome7、Opera*12.02、Safari 6.0。2.

移动浏览器

Firefox(Gecko)32、Chrome3、Opera*11.5、Safari 6.1

注意:readAsBinaryString()方法不建议使用,应改为readAsArrayBuffer()。

富锦
2023-03-14

这里的一些答案建议使用FormData(),但不幸的是,这是Internet Explorer 9及以下版本中不可用的浏览器对象。如果您需要支持那些较旧的浏览器,则需要使用备份策略,例如使用

已经有很多了。执行文件上传的js模块。这两种浏览器都明确支持较旧的浏览器:

  • https://github.com/leon/angular-upload-将iFrame用作后备方案
  • https://github.com/danialfarid/ng-file-upload-使用FileAPI/Flash作为后备方案

以及其他一些选择:

  • https://github.com/nervgh/angular-file-upload/
  • https://github.com/uor/angular-file
  • https://github.com/twilson63/ngUpload
  • https://github.com/uploadcare/angular-uploadcare

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

 类似资料:
  • 问题内容: 这是我的HTML表单: 我想从本地计算机上传图像,并想读取上传文件的内容。我想使用AngularJS进行的所有操作。 当我尝试打印时,它的值是未定义的。 问题答案: 这里的一些答案建议使用,但不幸的是,这是Internet Explorer 9及更低版本中不可用的浏览器对象。如果需要支持那些较旧的浏览器,则需要使用或使用Flash 的备份策略。 已经有许多Angular.js模块可以执

  • 问题内容: 我需要使用Laravel 5.1作为后端将图像和视频文件上传到Angular应用程序中的服务器。所有Ajax请求都需要首先发送到Laravel控制器,并且我们在这里有代码说明文件到达那里后如何处理。以前,我们已经完成了普通的HTML表单以将文件上传提交到控制器,但是在这种情况下,我们需要避免刷新表单的页面,因此我尝试通过Angular在Ajax中进行尝试。 我需要将以前通过HTML表单

  • 问题内容: 我正在使用AngularJS与Web服务进行交互,用于提取公开的各种实体。其中一些实体是图像,因此我需要能够使用“对象” 的动作在同一请求中发送二进制数据和文本字段。 如何在单个请求中使用AngularJS的服务发送数据并将图像上传到宁静的Web服务? 问题答案: 我进行了无数次搜索,尽管可能会错过它,但找不到该问题的解决方案:使用$ resource操作上传文件。 让我们举个例子:R

  • 问题内容: 由于我是AngularJS的新手,所以我不知道如何使用AngularJS在MVC中上传文件。我正在尝试上传一些没有任何特定类型或扩展名的文件,但失败了。 我创建了一个JavaScript文件,该文件具有- 这是serviceJS- 这是控制器部分- 并且,在查看页面中, 它在控制器中将 myFile 设为未定义。我无法调试。 提前致谢。 问题答案: 您不能将绑定到变量。您将需要创建一个

  • 我已经用angularjs做了一个上传文件的脚本。文件被成功上传到文件夹,但我的问题是,当从队列中删除一个文件时,它不会从文件夹中删除文件,有人知道如何解除关联或删除文件,当我点击删除文件夹时,我正在使用角上传文件。谢谢

  • 我在java配置中使用了Spring MVC,并定义了一些rest服务。我使用Spring作为服务器后端,使用AngularJS作为WebFronend。 我想从我的 AngularJS 站点上传一个或两个 CSV 文件到我的Rest服务。我必须如何使用java配置配置Spring才能使其正常工作?我使用了雄猫和一个 Servlet 3 容器。 我的上传Rest服务如下: 我需要“Standard