angularJs中上传图片/文件功能:ng-file-upload
原文技术交流:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/angularjs-ng-file-upload/
在做网站的过程中难免会遇到上传图片或者上传文件的功能,使用AngularJ实现的话可以用angularJs的ng-file-upload这个库。
- 支持上传文件(目前为止我用过的是Excel上传,与上传图片的方法一样)
- 支持单张图片上传
- 支持多张图片上传
- 支持拖拽图片上传
1.Install安装引用
- 手册:可以从这里下载最新的js库
- Bower安装:
bower install ng-file-upload-shim --save
(for non html5 suppport)
bower install ng-file-upload --save - NuGet:PM> Install-Package angular-file-upload
- NPM:npm install ng-file-upload
<script src="angular(.min).js"></script>
<script src="ng-file-upload-shim(.min).js"></script> <!-- for no html5 browsers support -->
<script src="ng-file-upload(.min).js"></script>
2.Usage用法
(1)Single image upload
image-upload.html:
//显示选择的图片
<img ngf-src="data.file || data.defaultImage" class="img-responsive" style="width:200px; height: 200px; max-width:500px;"/>
<div class="button" ngf-select="" ngf-pattern="'image/*'" ngf-multiple="false" ng-model="data.file">
选择文件
</div>
<button ng-click="upload()">upload</button> image-upload-ctrl.js:
$scope.data = {
file: null
};
$scope.upload = function () {
if (!$scope.data.file) {
return;
} var url = $scope.params.url; //params是model传的参数,图片上传接口的url
var data = angular.copy($scope.params.data || {}); // 接口需要的额外参数,比如指定所上传的图片属于哪个用户: { UserId: 78 }
data.file = $scope.data.file; Upload.upload({
url: url,
data: data
}).success(function (data) {
$scope.hide(data);
}).error(function () {
logger.log('error');
});
};
(2)Multiple images upload
<div class="button" ngf-select ngf-pattern="'image/*'" ng-model="files" ngf-multiple="true">选择多张图片</div> //ngf-multiple控制是否可以上传多张图片 // for multiple files:
$scope.upload = function (files) {
if (files && files.length) {
for (var i = ; i < files.length; i++) {
Upload.upload({..., data: {file: files[i]}, ...})...;
}
// or send them all together for HTML5 browsers:
Upload.upload({..., data: {file: files}, ...})...;
}
}
(3)Drop Single image
image-upload.html:
<button class="btn btn-default" ngf-select="" ngf-pattern="'image/*'" ng-model="data.file"
ngf-multiple="false">
选择图片
</button>
<span>(支持拖拽单张图片上传)</span> <div ngf-drop ngf-pattern="'image/*'" ng-model="data.file" class="cropArea">
<img-crop image="data.file|| data.defaultImage" resule-image="data.file"></img-crop> <div class="col col-sm-4 text-left">
<img ngf-src="data.file|| data.defaultImage"
style="width:200px; height: 200px; max-width:500px;"/>
</div>
</div> <button class="btn btn-primary" ng-click="upload()">开始上传</button> style.css:
.cropArea {
background: #E4E4E4;
min-height: 230px;
height: auto;
margin: 15px;
margin-right: ;
}
(4)Drop and Select Multiple images upload
image-upload.html:
<button class="btn btn-default" ngf-select="selectImage($files)" ngf-pattern="'image/*'"
ngf-multiple="true">
选择图片
</button>
<span>(支持多张图片拖拽上传)</span>
<div class="row cropArea" style="padding: 0 15px 15px 0" ngf-drop ngf-pattern="'image/*'" ng-model="files"
ngf-multiple="true">
<img-crop image="files || data.defaultImage" resule-image="files"></img-crop>
<div ngf-no-file-drop>该浏览器不支持拖拽上传。</div>
<div class="col col-xs-4 text-left" style="margin-top: 15px;" ng-repeat="image in mulImages">
<div ng-repeat="oneImage in image">
<img ngf-src="oneImage || data.defaultImage" class="img-responsive"
style="width:200px; height: 200px; max-width:500px;"/>
</div>
</div>
</div>
//<img-crop></img-crop>定义了图片可以拖拽的位置
//<img/>排列显示上传的多张图片 style.css:
.cropArea {
background: #E4E4E4;
min-height: 230px;
height: auto;
margin: 15px;
margin-right: ;
} image-upload-ctrl.js:
$scope.data = {
file: null,
defaultImage: commonSvc.defaultImage
}; $scope.mulImages = []; $scope.$watch('files', function () {
$scope.selectImage($scope.files);
});
//根据选择的图片来判断 是否为一下子选择了多张
//一下子选择多张的数据格式为一个数组中有多个对象,而一次只选择一张的数据格式为一个数组中有一个对象
$scope.selectImage = function (files) {
if (!files || !files.length) {
return;
}
if (files.length > ) {
angular.forEach(files, function (item) {
var image = [];
image.push(item);
$scope.mulImages.push(image);
})
} else {
$scope.mulImages.push(files);
}
}; $scope.upload = function () {
if (!$scope.mulImages.length) {
return;
}
var url = $scope.params.url;
var data = angular.copy($scope.params.data || {});
data.file = $scope.mulImages; Upload.upload({
url: url,
data: data
}).success(function (data) {
$scope.hide(data);
$rootScope.alert('success');
}).error(function () {
$rootScope.alert(‘error’);
}); };
以上内容是我做项目中需要的一些功能,也许不是该库全面的功能,若有其他需求可以查看GitHub官方文档:https://github.com/danialfarid/ng-file-upload
angularJs中上传图片/文件功能:ng-file-upload的更多相关文章
- [svc]linux中的文件描述符(file descriptor)和文件
linux中的文件描述符(file descriptor)和文件 linux为了实现一切皆文件的设计哲学,不仅将数据抽象成了文件,也将一切操作和资源抽象成了文件,比如说硬件设备,socket,磁盘,进 ...
- 《Play for Java》学习笔记(六)文件上传file upload
一. Play中标准方法 使用表单form和multipart/form-data的content-type类型. 1.Form @form(action = routes.Application.u ...
- 查找EBS中各种文件版本(Finding File Versions in the Oracle Applications EBusiness Suite - Checking the $HEADER)
Finding File Versions in the Oracle Applications EBusiness Suite - Checking the $HEADER (文档 ID 85895 ...
- Java springboot 中上传图片文件的1Md的限制
在配置文件中修改了 spring.servlet.multipart.max-file-size=3.40spring.servlet.multipart.max-request-size=3M 遇到 ...
- jQuery File Upload 单页面多实例的实现
jQuery File Upload 的 GitHub 地址:https://github.com/blueimp/jQuery-File-Upload 插件描述:jQuery File Upload ...
- Warning: File upload error - unable to create a temporary file in Unknown on line 0
upload_tmp_dir 临时文件夹问题 上传文件提示 Warning: File upload error - unable to create a temporary file in Unkn ...
- JQuery File Upload 插件 出现 “empty file upload result” 错误的解决方案。
本例中采用的是 JQuery File Upload + ASP.NET 的方式, Google了大半天基本没有找到合理的解决方案,倒是在 NodeJS的一遍博客中找到了灵感:http://www.i ...
- jQuery file upload cropper的流程
https://tkvw.github.io/jQuery-File-Upload/basic-plus-editor.html 最开始初始化jquery.ui.widget.js中的factory( ...
- ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案
摘要: ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案 在struts2应用中使用ueditor富文本编辑器上传图片或者附件时,即使配置 ...
随机推荐
- android adb服务启动不了解决办法
当然还有可能是其它的原因,下面是一些解决办法的汇总 因为在对应的文件夹下找不到adb的问题,将android-sdk/platform-tools和android-sdk/tools都加到环境变量中去 ...
- mysql 字段操作
1.添加字段 ALTER TABLE lucky_user ADD COLUMN id_type TINYINT NOT NULL DEFAULT '0' COMMENT "0: 普通用户, ...
- Junit 测试断言说明
Assert.assertEquals("发生错误时报告消息","预期值","生产值"); Assert.assertEquals(&quo ...
- 初始化css代码需要注意的
(从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期 2014-05-06) 写在所有css代码之前,对网页中所有同类元素的一个样式规则代码或者一些基础性公用元素的样式规则代码. 1.空白 ...
- EXTJS中的grid显示实际行号
添加一个新的功能 Ext.grid.PageRowNumberer = Ext.extend(Ext.grid.RowNumberer, { width : 40, renderer:function ...
- VNC 抓取远程桌面
VNC (Virtual Network Computing)是虚拟网络计算机的缩写.VNC 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的.VNC 是在基于 UNI ...
- .NET企业轻量级开发框架(APS.NET+Spring.Net+NHibernate)
在<企业级应用架构>系列文章发表之余,也得到了许多同行的反馈,有人说这套框架太重了或者技术学习太复杂了或者初学者不太好理解或者完全颠覆了传统APS.NET开发模式让人望而生畏. ...
- python批量GBK转UTF-8
有时候编码问题在导入工程的时候很烦,所以还是让世界都是"UTF-8"吧. 抄来一段代码: #!/usr/env python # -*- coding: utf8 -*- impo ...
- Codeforces Round #308 (Div. 2)B. Vanya and Books 数学
B. Vanya and Books Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/552/pr ...
- MySQL CAST与CONVERT 函数的用法
MySQL CAST与CONVERT 函数的用法 产生另一个类型的值 MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值. 两者具体的语法如下:1 CAS ...