angular-file-upload封装为指令+图片尺寸限制
不了解angular-file-upload基础使用
请先参考http://blog.csdn.net/lai_xu/article/details/49535847 博客地址
下文如果有更好的建议请多多评论
1. directive.js中的指令编写
/*
上传插件
*/
app.directive('myUpload', function (FileUploader) {
var helper = {
getType: function (name) {
return '|' + name.slice(name.lastIndexOf('.') + 1) + '|';
},
/*
type 类型
closeMsg true 关闭提示
*/
isImage: function (type, closeMsg) {
if ('|jpg|png|jpeg|bmp|gif|'.indexOf(type.toLowerCase()) !== -1) {
return true;
} else {
if (!closeMsg) {
layer.alert("请确定文件格式为|jpg|png|jpeg|bmp|gif|", { icon: 7 });
return false;
}
}
},
isDoc: function (type, closeMsg) {
if ('|doc|docx|txt|'.indexOf(type.toLowerCase()) !== -1) {
return true;
} else {
if (!closeMsg) {
layer.alert("请确定文件格式为|doc|docx|txt|", { icon: 7 });
return false;
}
}
},
isVideo: function (type, closeMsg) {
if ('|rm|rmvb|avi|mp4|3gp|'.indexOf(type.toLowerCase()) !== -1) {
return true;
} else {
if (!closeMsg) {
layer.alert("请确定文件格式为|rm|rmvb|avi|mp4|3gp|", { icon: 7 });
return false;
}
}
},
isMp3: function (type, closeMsg) {
if ('|mp3|'.indexOf(type.toLowerCase()) !== -1) {
return true;
} else {
if (!closeMsg) {
layer.alert("请确定文件格式为|mp3|", { icon: 7 });
return false;
}
}
},
isZip: function (type, closeMsg) {
if ('|zip|rar|'.indexOf(type.toLowerCase()) !== -1) {
return true;
} else {
if (!closeMsg) {
layer.alert("请确定文件格式为|zip|rar|", { icon: 7 });
return false;
}
}
},
//检查尺寸是否符合规范
uploadImgCheckedPx: function (f, w, h, msg, callback) {
if (w && h) {
var reader = new FileReader();
reader.onload = function (e) {
//判断图片尺寸
var img = null;
img = document.createElement("img");
document.body.appendChild(img);
img.style.visibility = "hidden";
img.src = this.result;
var imgwidth = img.naturalWidth;
var imgheight = img.naturalHeight;
if (imgwidth != w || imgheight != h) {
document.body.removeChild(img);
if (msg) {
msg += ">";
} else {
msg = "";
}
//询问框
layer.confirm(msg + "尺寸建议" + w + "x" + h + ",确定上传吗?", {
btn: ['确定', '取消'],
cancel: function () {
callback && callback(false);
}
}, function (index) {
layer.close(index);
callback && callback(true);
}, function () {
callback && callback(false);
});
} else {
callback && callback(true);
}
}
if (f)
reader.readAsDataURL(f);
} else {
callback && callback(true);
}
}
};
return {
restrict: 'E',
replace: true,
scope: {
filters: '@filters',
response: '=response',
size: '=size',
callback: '@callback',
width: '@width',
height: '@height',
msg: '@msg'
},
template: '<input type="file" nv-file-select="" uploader="uploader" filters="{{filters}}" />',
link: function (scope, element, attributes) {
element.bind("change", function (changeEvent) {
scope.$apply(function () {
scope.selectedFile = changeEvent.target.files[0];
var type = helper.getType(scope.selectedFile.name);
if (helper.isImage(type, true)) {
helper.uploadImgCheckedPx(scope.selectedFile, scope.width, scope.height, scope.msg, function (state) {
if (state)
scope.uploader.uploadAll();
else
scope.uploader.clearQueue();
});
} else {
scope.uploader.uploadAll();
}
});
});
},
controller: function ($scope) {
var uploader = $scope.uploader = new FileUploader({
url: '/Handler/Upload.ashx',
autoUpload: false,//自动上传
removeAfterUpload: true,//文件上传成功之后从队列移除,默认是false
queueLimit: 1// 最大上传文件数量
});
//文件限制提示语
var showMsg = function (itemSize, maxSize) {
if (itemSize / 1024 >= maxSize) {
layer.alert("文件大小必须小于" + (maxSize).toFixed(0) + "KB", { icon: 7 });
return false;
}
$scope.size = itemSize;
return true;
}
// FILTERS
uploader.filters.push({
name: 'imageFilter',
fn: function (item /*{File|FileLikeObject}*/, options) {
if (!showMsg(item.size, 4096)) {
return false;
}
var type = helper.getType(item.name);
return helper.isImage(type) && this.queue.length < 5;
}
},
{
name: 'docFilter',
fn: function (item /*{File|FileLikeObject}*/, options) {
if (!showMsg(item.size, 3072)) {
return false;
}
var type = helper.getType(item.name);
return helper.isDoc(type);
}
},
{
name: 'videoFilter',
fn: function (item /*{File|FileLikeObject}*/, options) {
if (!showMsg(item.size, 204800)) {
return false;
}
var type = helper.getType(item.name);
return helper.isVideo(type);
}
},
{
name: 'mp3Filter',
fn: function (item /*{File|FileLikeObject}*/, options) {
if (!showMsg(item.size, 20480)) {
return false;
}
var type = helper.getType(item.name);
return helper.isMp3(type);
}
},
{
name: 'zipFilter',
fn: function (item /*{File|FileLikeObject}*/, options) {
if (!showMsg(item.size, 20480)) {
return false;
}
var type = helper.getType(item.name);
return helper.isZip(type);
}
});
// CALLBACKS uploader.onWhenAddingFileFailed = function (item, filter, options) {
console.info('onWhenAddingFileFailed', item, filter, options);
};
uploader.onAfterAddingFile = function (fileItem) {
console.info('onAfterAddingFile', fileItem);
};
uploader.onAfterAddingAll = function (addedFileItems) {
console.info('onAfterAddingAll', addedFileItems);
};
uploader.onBeforeUploadItem = function (item) {
console.info('onBeforeUploadItem', item);
};
uploader.onProgressItem = function (fileItem, progress) {
console.info('onProgressItem', fileItem, progress);
};
uploader.onProgressAll = function (progress) {
console.info('onProgressAll', progress);
};
uploader.onSuccessItem = function (fileItem, response, status, headers) {
console.info('onSuccessItem', fileItem, response, status, headers);
if (response.indexOf("error") == -1) {
$scope.response = response;
if ($scope.callback) {
$scope.$emit($scope.callback, response);
}
}
else {
layer.alert(response, { icon: 2 });
}
};
uploader.onErrorItem = function (fileItem, response, status, headers) {
console.info('onErrorItem', fileItem, response, status, headers);
};
uploader.onCancelItem = function (fileItem, response, status, headers) {
console.info('onCancelItem', fileItem, response, status, headers);
};
uploader.onCompleteItem = function (fileItem, response, status, headers) {
console.info('onCompleteItem', fileItem, response, status, headers);
};
uploader.onCompleteAll = function () {
console.info('onCompleteAll');
};
}
};
});
2.如何使用
<!--
filters 代表 你使用指令中的哪个过滤器 例如 imageFilter docFilter 具体看 directive.js中的 filters
msg 提示语
width height 图片的限制尺寸
response 回掉属性 上传成功后会 给你的 $scope.resUrl赋值
callback 回掉方法 上传成功后会 触发你的 callback 方法 从而实现多图上传
size 回掉属性 上传成功后会 给你的 $scope.fileSize赋值 单位b字节
-->
<my-upload filters="imageFilter" msg="单张图片" width="690" height="350" response="resUrl" callback=""></my-upload>
<my-upload filters="imageFilter" msg="多张图片" width="690" height="350" response="" callback="addScenicLongPicEvent"></my-upload>
<my-upload filters="mp3Filter" response="currentItem.VoiceUrl" size="fileSize"></my-upload>
3.controller中回掉方法
//多图添加事件 对比2中 上传图片callback方法
$scope.$on('addScenicLongPicEvent', function (event, res) {
$scope.currentScenicLongPic.push(res);
});
4.后台上传代码
/// <summary>
/// Upload 的摘要说明
/// </summary>
public class Upload : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
try
{
var file = context.Request.Files[];
var debugState = System.Configuration.ConfigurationManager.AppSettings["DebugState"];
var path = file.FileName.Substring(file.FileName.LastIndexOf("."));
var name = "qhLjlx/" + path + "/" + ((DateTime.Now.ToUniversalTime().Ticks - ) / ) + new Random().Next(, ); //时间戳
name += path; //获取文件名称
var resUrl = "";
//aliyun upload
if (LjlxUpdate.UpdateAL(name, file.InputStream, out resUrl, debugState == "true"))
context.Response.Write(resUrl);
else
context.Response.Write("error|服务器端错误远程阿里云上传失败!");
}
catch (Exception ex)
{
context.Response.Write("error|" + ex.Message);
}
return;
} public bool IsReusable
{
get
{
return false;
}
}
}
angular-file-upload封装为指令+图片尺寸限制的更多相关文章
- angular把echarts封装为指令(配合requirejs)
1.在require中配置echartsjs文件 2.在directives下定义指令(定义为全局的指令,任何页面调用都可以) define(['app','echarts'],function(ap ...
- angularjs file upload插件使用总结
之前由于项目需要,决定使用angularjs做前端开发,在前两个项目中都有文件上传的功能,因为是刚接触angularjs,所以对一些模块和模块间的依赖不是很了解.都是由其他大神搭好框架,我只做些简单的 ...
- jQuery File Upload 单页面多实例的实现
jQuery File Upload 的 GitHub 地址:https://github.com/blueimp/jQuery-File-Upload 插件描述:jQuery File Upload ...
- jQuery File Upload文件上传插件简单使用
前言 开发过程中有时候需要用户在前段上传图片信息,我们通常可以使用form标签设置enctype=”multipart/form-data” 属性上传图片,当我们点击submit按钮的时候,图片信息就 ...
- jQuery File Upload 判断图片尺寸,限定图片宽高的办法
1.必须熟读jQuery File Upload 文档,在add方法中进行判断,如果不符合条件,就用 data.abort()方法取消上传动作. $("file").fileupl ...
- kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸
kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸
- jQuery File Upload 图片上传解决方案兼容IE6+
1.下载:https://github.com/blueimp/jQuery-File-Upload 2.命令: npm install bower install ================= ...
- springmvc处理上传图片代码(校验图片尺寸、图片大小)
package com.maizuo.web.controller; import com.maizuo.domain.Result; import com.maizuo.util.Constants ...
- 上传文件 file upload 学习笔记
这里我只会说说一些完成 file upload 的基础 API. 很多项目我们需要上传文件. 有简单的 input file, 有需要验证的,有需要压缩的(img),有需要分段的(video),有需要 ...
随机推荐
- jenkins插件之如何优雅的生成版本号
一.简介 在持续集成中,版本管理是非常重要的一部分,本章将介绍如何Version Number Plug插件生成优雅的版本号. 二.安装 系统管理-->插件管理 搜索 Version Numbe ...
- 二叉搜索树的平衡--AVL树和树的旋转(图解)
二叉搜索树只有保持平衡时其查找效率才会高. 要保持二叉搜索树的平衡不是一件易事.不过还是有一些非常经典的办法可以做到,其中最好的方法就是将二叉搜索树实现为AVL树. AVL树得名于它的发明者 G.M. ...
- Linuxc - 多c文件程序编译执行
多文件使用,一起编译 定义max.h int max(int a,int b); 定义max.c #include "max.h" int max(int a,int b) { i ...
- 自学python Day01
What is Python 1. 面向对象的解释行语言 2. 非常丰富的库 3. 使用制表符作为语句缩进 (white space) 优点: 1. 免费.开源 2. 可扩展性.可嵌入性 3. 非常丰 ...
- ie、firefox、chrome中关于style="display:block" 引发的页面布局错乱的解决办法
ie.firefox.chrome中关于style="display:block" 引发的页面布局错乱的解决办法: table中tr 添加style="display:b ...
- vue初学者
先分享一波福利 vue学习视频 链接:https://pan.baidu.com/s/1ggSfE75 密码:7h2a 1.先安装 webpack vue-cli ...
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致. 例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest. ...
- php foreach用法和实例
原文地址:http://www.cnblogs.com/DaBing0806/p/4717718.html foreach()有两种用法:1: foreach(array_name as $value ...
- Git: 本地创建版本库用于多处同步
问题背景 目前有一个 Android 和 一个 iOS 项目,两个项目底层使用相同的 C++ 代码.由于在开发迭代中代码时常更新,而且往往是今天 Android 部分修改一小部分,明天 iOS 部分修 ...
- OpenFlow交换机的实现总结
先粗略介绍,后续会逐渐完善. OpenFlow交换机通过使用OpenFlow协议的安全通道与控制器进行通信.其具体实现如下示意图所示: 对于一个新到达的数据流,交换机通常的做法是,把该数据包发送给控制 ...