$(function()
{
var $list = $('.uploader-list');
var $ul = $list.find('ul');
var category_id = $list.data('cid');
var key = $list.data('key');
var action = $list.data('action');
var ext = $list.data('extensions') || null;
var ext_arr = (ext == null) ? [] : ext.split(',');
var accept = (action == 'uploadimage') ? {extensions: ext, mimeTypes: 'image/*'} : null;
// 初始化WebUploader
var uploader = WebUploader.create({
// swf文件路径
swf: $list.data('swf-url'),
// 文件接收服务端。
server: $list.data('server-url'),
// 设置文件上传域的name
fileVal: 'upfile',
// 请求参数
formData: {
action: action,
category_id: category_id,
key: key,
upload_source: 'scanupload'
},
// 指定文件格式
accept: accept,
// 选择文件的按钮。可选。
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick: {
id: '#picker',
innerHTML: '',
multiple: true
},
// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
resize: false,
// 选择文件后自动开始上传
//auto: true,
// 上传并发数。允许同时最大上传进程数
threads: 1,
// 拖入功能
dnd: '.uploader-list',
disableGlobalDnd: false,
// 粘贴
paste: '.uploader-list'
});
// 开始上传
$('.upload-submit').on('click', function()
{
uploader.upload();
});
// 清空所有
$('.remove-all-submit').on('click', function()
{
$ul.find('li').each(function(item)
{
$(this).find('.remove').trigger('click');
});
});
// 当有文件被添加进队列的时候
uploader.on('fileQueued', function(file)
{
// 列表数据
var $li = $(`
`+(action == 'uploadimage' && ext_arr.indexOf(file.ext) != -1 ? '
' : '')+`
`+file.name+`
`+AnnexSizeToUnit(file.size)+`
`+($list.data('upload-status-await-text') || '等待上传')+`
`+(window['lang_operate_remove_name'] || '移除')+`
`);
var $img = $li.find('.name img');
$ul.append($li);
// 缩略图、如果为非图片文件,可以不用调用此方法
if($img.length > 0)
{
uploader.makeThumb(file, function(error, src)
{
if(!error && src)
{
$img.attr('src', src);
}
}, 100, 100);
}
// 隐藏无数据提示
$('.table-no').addClass('am-hide');
// 移除
$li.on('click', '.remove', function() {
// 移除数据
uploader.removeFile( file );
$li.remove();
// 显示无数据提示
if($('.uploader-list li').length <= 1)
{
$('.table-no').removeClass('am-hide');
}
});
});
// 文件上传过程中创建进度条实时显示。
// file {File}File对象
// percentage {Number}上传进度
uploader.on('uploadProgress', function(file, percentage)
{
var $li = $('#'+file.id);
var ratio = percentage*100+'%';
$li.find('p.status').text(($list.data('upload-status-progress-text') || '上传中')+'('+ratio+')');
$progress = $li.find('.progress');
$progress.css('width', ratio).removeClass('am-hide').addClass('progress');
// 滚动到最后的位置
$list.stop(true).animate({scrollTop: $list[0].scrollHeight}, 500);
});
// 当文件上传成功时触发。
// file {File}File对象
// response {Object}服务端返回的数据
uploader.on('uploadSuccess', function(file, response)
{
if(response.code == 0)
{
var $li = $('#'+file.id);
$li.find('p.status').text($list.data('upload-status-success-text') || '上传成功').removeClass('progress').addClass('success');
} else {
var $li = $('#'+file.id);
$li.find('p.status').text(($list.data('upload-status-fail-text') || '上传失败')+'('+response.msg+')').removeClass('progress').addClass('fail');
$progress = $li.find('.progress');
$progress.css('width', '0%' ).addClass('am-hide');
}
});
// 当文件上传出错时触发。
// file {File}File对象
// reason {String}出错的code
uploader.on('uploadError', function(file, reason)
{
var $li = $('#'+file.id);
$li.find('p.status').text(($list.data('upload-status-fail-text') || '上传失败')+'('+reason+')').removeClass('progress').addClass('fail');
$progress = $li.find('.progress');
$progress.css('width', '0%' ).addClass('am-hide');
});
});