Authored by xuhongyun

Merge branch 'size_limit' into dev_2.2

... ... @@ -125,10 +125,9 @@ gulp.task('server', function () {
* 服务器打包
**************************************************************/
gulp.task("mvc", ["controllers","interfaces","view","framework"]);
gulp.task("controllers", function () {
vfs.src("./apps/**/controllers/*.js").pipe(mapStream(function(file,callback){
file.path=file.path.replace(/apps\\([^/]+)\\controllers\\([^.]+).js/g, function($0,$1,$2){
file.path=file.path.replace(/apps\/([^/]+)\/controllers\/([^.]+).js/g, function($0,$1,$2){
return ["controllers",$1+"."+$2+".js"].join(path.sep);
});
callback(null,file);
... ... @@ -136,7 +135,7 @@ gulp.task("controllers", function () {
});
gulp.task("interfaces", function () {
vfs.src("./apps/**/interfaces/*.js").pipe(mapStream(function(file,callback){
file.path=file.path.replace(/apps\\([^/]+)\\interfaces\\([^.]+).js/g, function($0,$1,$2){
file.path=file.path.replace(/apps\/([^/]+)\/interfaces\/([^.]+).js/g, function($0,$1,$2){
return ["interfaces",$1+"."+$2+".js"].join(path.sep);
});
callback(null,file);
... ...
... ... @@ -140,14 +140,14 @@ Controller.prototype.client=function(res,views,model,clientmodel){
var src="";
if(process.env.NODE_ENV==="production"||process.env.NODE_ENV==="gray"){
src="http://cdn.yoho.cn/"+config.name+"/"+config.version;
html=html.replace(/\/static\/index\.min\.css/g,function($1){
return src+"/index.min.css";
})
}else{
// if(process.env.NODE_ENV==="production"||process.env.NODE_ENV==="gray"){
// src="http://cdn.yoho.cn/"+config.name+"/"+config.version;
// html=html.replace(/\/static\/index\.min\.css/g,function($1){
// return src+"/index.min.css";
// })
// }else{
src="/static";
}
// }
var script=['<script type="text/javascript" src="'+src+'/'+clientmodel+'/libs.js"></script>',
'<script type="text/javascript" src="'+src+'/'+clientmodel+'/'+ views+'.js"></script>'];
res.send(html+ViewModel+script.join(''));
... ...
{
"name": "yohobuy-portal-fe",
"version": "4.9.6",
"version": "4.9.8",
"description": "Construction of the presentation layer solution is based on express, handlebars",
"main": "app.js",
"scripts": {
... ...
... ... @@ -11,7 +11,18 @@ $.fn.ajaxfileupload = function(options) {
onCancel: function() {},
validate_extensions: true,
valid_extensions: ['gif', 'png', 'jpg', 'jpeg'],
submit_button: null
// added by xuhongyun for upload limit
// 上传大小: 单位kb, 默认限制50mb
// size="500" spec="1500*1500"
size_limit: 50 * 1024,
// 图片规格 width * heith,单位px, 默认不限制
valid_spec: false,
width_limit: 0,
height_limit: 0,
// end added
submit_button: null
};
var uploading_file = false;
... ... @@ -27,6 +38,27 @@ $.fn.ajaxfileupload = function(options) {
if (extend) {
settings.valid_extensions = extend.split(',');
}
// add by xuhongyun for upload limit
var size = $element.attr("size");
if (size) {
settings.size_limit = parseInt(size);
}
var spec = $element.attr("spec");
if (spec) {
var array = spec.split('*');
if (array.length == 2) {
settings.width_limit = parseInt(array[0]);
settings.height_limit = parseInt(array[1]);
}
if (settings.width_limit != 0 && settings.height_limit != 0) {
settings.valid_spec = true;
}
}
// end added
// var bucket = $element.attr("bucket");
// if(bucket){
// settings.params.bucket=bucket;
... ... @@ -54,6 +86,60 @@ $.fn.ajaxfileupload = function(options) {
var ext = $element.val().split('.').pop().toLowerCase();
console.log(settings.validate_extensions);
// add by xuhongyun for upload limit
var files = $element[0].files;
if (files) {
$.each(files, function(index, file) {
// 加载图片,为了获取图片大小
var windowURL = window.URL || window.webkitURL;
var dataURL = windowURL.createObjectURL(file);
var frame_id = 'preview-' + Math.round(new Date().getTime());
$('<img id="' + frame_id +'" />').appendTo('body').attr("src", dataURL);
var img = $('#' + frame_id)[0];
// if (img.complete) {
// alert("加载完成");
// }
// else {
img.onload = function() {
var width = img.offsetWidth,
height = img.offsetHeight;
if (settings.valid_spec == true
&& Math.abs(width - settings.width_limit) > 10
&& Math.abs(height - settings.height_limit) > 10 ) {
// 图片规格超出限制
settings.onComplete.apply($element, [{
status: false,
message: '只允许上传' + settings.width_limit + '*' + settings.height_limit + '的文件,第' + (index+1) + '个文件不符合要求'
}, settings.params]);
var _$element = $element.clone();
var _$parent = $element.parent();
$element.remove();
_$parent.append(_$element);
_$element.ajaxfileupload(settings);
}
// }
};
if (file.size / 1024 > settings.size_limit) {
// 上传大小超出限制。
settings.onComplete.apply($element, [{
status: false,
message: '只允许上传大小' + settings.size_limit + 'KB以内的文件,第' + (index + 1) + '个文件不符合要求'
}, settings.params]);
var _$element = $element.clone();
var _$parent = $element.parent();
$element.remove();
_$parent.append(_$element);
_$element.ajaxfileupload(settings);
return;
}
});
}
// end added
if (true === settings.validate_extensions && $.inArray(ext, settings.valid_extensions) == -1) {
settings.onComplete.apply($element, [{
status: false,
... ...
... ... @@ -140,14 +140,14 @@ Controller.prototype.client=function(res,views,model,clientmodel){
var src="";
if(process.env.NODE_ENV==="production"||process.env.NODE_ENV==="gray"){
src="http://cdn.yoho.cn/"+config.name+"/"+config.version;
html=html.replace(/\/static\/index\.min\.css/g,function($1){
return src+"/index.min.css";
})
}else{
// if(process.env.NODE_ENV==="production"||process.env.NODE_ENV==="gray"){
// src="http://cdn.yoho.cn/"+config.name+"/"+config.version;
// html=html.replace(/\/static\/index\.min\.css/g,function($1){
// return src+"/index.min.css";
// })
// }else{
src="/static";
}
// }
var script=['<script type="text/javascript" src="'+src+'/'+clientmodel+'/libs.js"></script>',
'<script type="text/javascript" src="'+src+'/'+clientmodel+'/'+ views+'.js"></script>'];
res.send(html+ViewModel+script.join(''));
... ...
{"name":"yohobuy-portal-fe","version":"4.9.6","description":"Construction of the presentation layer solution is based on express, handlebars","main":"app.js","scripts":{"code":"set NODE_ENV=coding&& gulp start","build":"set NODE_ENV=production && gulp && gulp mvc","server":"set NODE_ENV=server&& gulp start"},"dependencies":{"art-template":"^3.0.3","async":"^2.0.0-rc.3","body-parser":"^1.15.0","connect-multiparty":"^2.0.0","connect-redis":"^3.0.2","cookie-parser":"^1.4.1","dev":"^0.1.3","express":"^4.13.4","express-session":"^1.13.0","glob":"^7.0.3","lodash":"^4.11.1","md5":"^2.1.0","mkdirp":"^0.5.1","request":"^2.72.0","vue-router":"^0.7.13","vuex":"^1.0.0-rc.2","winston":"^2.2.0"}}
\ No newline at end of file
{"name":"yohobuy-portal-fe","version":"4.9.8","description":"Construction of the presentation layer solution is based on express, handlebars","main":"app.js","scripts":{"code":"set NODE_ENV=coding&& gulp start","build":"set NODE_ENV=production && gulp && gulp mvc","server":"set NODE_ENV=server&& gulp start"},"dependencies":{"art-template":"^3.0.3","async":"^2.0.0-rc.3","body-parser":"^1.15.0","connect-multiparty":"^2.0.0","connect-redis":"^3.0.2","cookie-parser":"^1.4.1","dev":"^0.1.3","express":"^4.13.4","express-session":"^1.13.0","glob":"^7.0.3","lodash":"^4.11.1","md5":"^2.1.0","mkdirp":"^0.5.1","request":"^2.72.0","vue-router":"^0.7.13","vuex":"^1.0.0-rc.2","winston":"^2.2.0"}}
\ No newline at end of file
... ...
{
"apps": [
{
"name": "yohobuy-portal",
"script": "index.js",
"instances": "max",
"exec_mode": "cluster",
"merge_logs": true,
"log_data_format": "YYYY-MM-DD HH:mm Z",
"env": {
"PORT": 30012,
"TZ": "Asia/Shanghai"
}
}
]
}
... ...