使用AngularJS进行文件上传
使用AngularJS进行文件上传
这是我的HTML表单:
我想从本地计算机上传图像,并想读取上传文件的内容。我希望使用AngularJS完成所有这些操作。
当我尝试打印$scope.file
变量的值时,它显示为未定义。
admin 更改状态以发布 2023年5月24日
最简单的方法是使用HTML5 API,即FileReader
HTML非常简单:
在您的控制器中定义"add"方法:
$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),Chrome 7,Opera* 12.02,Safari 6.0.2
移动浏览器
Firefox(Gecko) 32,Chrome 3,Opera* 11.5,Safari 6.1
注意:readAsBinaryString() 方法已被弃用,应使用readAsArrayBuffer()代替。
这里的一些答案建议使用FormData()
,但不幸的是这是一个在Internet Explorer 9及以下版本中不可用的浏览器对象。如果你需要支持那些老的浏览器,你将需要一个备用策略,比如使用或Flash。
已经有很多Angular.js模块可以执行文件上传操作。这两个有明确支持旧版本浏览器的:
- https://github.com/leon/angular-upload - 使用
iframes
作为后备方案 - 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
其中之一应该适合你的项目,或者为你自己编写代码提供一些见解。