define(['jquery', 'bootstrap', 'backend', 'config', 'plupload'], function ($, undefined, Backend, Config, Plupload) {
var Upload = {
list: {},
config: {
container: document.body,
classname: '.plupload',
},
api: {
//Plupload上传
plupload: function (element, onAfterUpload) {
element = typeof element == 'undefined' ? Upload.config.classname : element;
$(element, Upload.config.container).each(function () {
var id = $(this).prop("id");
var url = $(this).data("url");
var maxsize = $(this).data("maxsize");
var mimetype = $(this).data("mimetype");
var multipart = $(this).data("multipart");
var multiple = $(this).data("multiple");
//上传URL
url = url ? url : Config.upload.uploadurl;
//最大可上传
maxsize = maxsize ? maxsize : Config.upload.maxsize;
//文件类型
mimetype = mimetype ? mimetype : Config.upload.mimetype;
//请求的表单参数
multipart = multipart ? multipart : Config.upload.multipart;
//是否支持批量上传
multiple = multiple ? multiple : Config.upload.multiple;
//生成Plupload实例
Upload.list[id] = new Plupload.Uploader({
runtimes: 'html5,flash,silverlight,html4',
multi_selection: multiple, //是否允许多选批量上传
browse_button: id, // 浏览按钮的ID
container: $(this).parent().get(0), //取按钮的上级元素
flash_swf_url: '/assets/libs/plupload/js/Moxie.swf',
silverlight_xap_url: '/assets/libs/plupload/js/Moxie.xap',
filters: {
max_file_size: maxsize,
mime_types: mimetype
},
url: url,
multipart_params: multipart,
init: {
PostInit: function () {
},
FilesAdded: function (up, files) {
Plupload.each(files, function (file) {
//这里可以改成其它的表现形式
//document.getElementById('filelist').innerHTML += '
' + file.name + ' (' + plupload.formatSize(file.size) + ')
';
});
$("#" + id).data("bakup-html", $("#" + id).html());
//添加后立即上传
setTimeout(function () {
Upload.list[id].start();
}, 1);
},
UploadProgress: function (up, file) {
//这里可以改成其它的表现形式
//document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '' + file.percent + "%";
$("#" + id).prop("disabled", true).html(" 上传" + file.percent + "%");
},
FileUploaded: function (up, file, info) {
//还原按钮文字及状态
$("#" + id).prop("disabled", false).html($("#" + id).data("bakup-html"));
//这里可以改成其它的表现形式
//document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML += (' [Url]: ' + '' + url + '');
//这里建议不修改
try {
var ret = JSON.parse(info.response);
if (ret.hasOwnProperty('code')) {
ret.data = ret.code == 200 ? ret.data : ret.data;
ret.code = ret.code == 200 ? 1 : ret.code;
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
$("input[data-plupload-id='" + id + "-text']").val(data);
var afterUpload = $("#" + id).data("after-upload");
if (afterUpload && typeof Upload.api.custom[afterUpload] == 'function') {
Upload.api.custom[afterUpload].call(info, id, data);
}
if (typeof onAfterUpload == 'function') {
onAfterUpload.call(info, id, data);
}
} else {
Toastr.error(e.message + "(code:-2)");
}
} catch (e) {
Toastr.error(e.message + "(code:-1)");
}
},
Error: function (up, err) {
Toastr.error(err.message + "(code:" + err.code + ")");
}
}
});
Upload.list[id].init();
});
},
// AJAX异步上传,主要用于Summernote上传回调
send: function (file, callback) {
var data = new FormData();
data.append("file", file);
$.each(Config.upload.multipart, function (k, v) {
data.append(k, v);
});
$.ajax({
url: Config.upload.uploadurl,
data: data,
cache: false,
contentType: false,
processData: false,
type: 'POST',
dataType: 'json',
success: function (ret) {
if (ret.hasOwnProperty("code")) {
ret.data = ret.code == 200 ? ret : ret.data;
ret.code = ret.code == 200 ? 1 : ret.code;
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
if (ret.code === 1) {
// 如果回调存在,则直接调用回调
if (typeof callback == 'function') {
callback.call(this, data);
} else {
Toastr.success(msg ? msg : __('Operation completed'));
}
} else {
Toastr.error(msg ? msg : __('Operation failed'));
}
} else {
Toastr.error(__('Unknown data format'));
}
}, error: function () {
Toastr.error(__('Network error'));
}
});
},
custom: {
//自定义上传完成回调
afteruploadcallback: function (id, response) {
console.log(this, id, response);
alert("Custom Callback,Response URL:" + response.url);
},
},
}
};
return Upload;
});