百度编辑器ueditor批量上传图片或者批量上传文件时,文件名称和内容不符合,错位问题
百度编辑器ueditor批量上传附件时,上传后的文件和实际文件名称错误,比如实际是文件名“dongcoder.xls”,上传后可能就成了“懂客.xls”。原因就是,上传文件时是异步上传,同时进行,导致上传完成的顺序和实际的顺序可能是不一样的,文件都有大小的不同。这是百度编辑器ueditor的一个BUG。
我的百度编辑器版本:1.4.3
修改文件可以解决,相应文件:ueditor\dialogs\attachment\attachment.js
大约在510行处,将原来的“_this.fileList.push(json);”注销,新加“_this.fileList[$file.index()] = json;”,详细参见下图:
uploader.on('uploadSuccess', function (file, res) {
var $file = $('#' + file.id);
try {
var responseText = (res._raw || res),
json = utils.str2json(responseText);
if (json.state == "SUCCESS") {
// _this.imageList.push(json);
_this.fileList[$file.index()] = json;
$file.append('<span class="success"></span>');
} else {
$file.find('.error').text(json.state).show();
}
} catch (e) {
$file.find('.error').text(lang.errorServerUpload).show();
}
});
在下方大约551行处,getInsertList方法内,增加“if (data == undefined) { continue; }”,详细参见下图:
getInsertList: function () {
var i, link, data, list = [],
prefix = editor.getOpt('fileUrlPrefix'),
fileSrcField = editor.getOpt("fileUploadService")(this, editor).fileSrcField || 'url',
fileSrc = '',
fileSrcFieldKeys = fileSrcField.split('.');
for (i = 0; i < this.fileList.length; i++) {
data = this.fileList[i];
if (data == undefined) { continue; }
if(fileSrcFieldKeys.length > 1) {
function setFileSrc(obj, keys, index) {
obj = obj[keys[index]];
if (index < keys.length - 1) {
setFileSrc(obj, keys, index += 1)
} else {
fileSrc = obj;
}
}
setFileSrc(data, fileSrcFieldKeys, 0);
} else {
fileSrc = data[fileSrcField];
}
link = fileSrc;
list.push({
title: data.original || link.substr(link.lastIndexOf('/') + 1),
url: prefix + link
});
}
return list;
}