这是我的超文本标记语言形式:
<form name="myForm" ng-submit="">
<input ng-model='file' type="file"/>
<input type="submit" value='Submit'/>
</form>
我想从本地机器上传图像,并希望读取上传文件的内容。所有这些我都想使用AngularJS来完成。
当我试图打印$scope的值时。文件
它是未定义的。
这是一种现代浏览器方式,没有第三方库。适用于所有最新的浏览器。
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/
最简单的方法是使用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()。
这里的一些答案建议使用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