mirror of
https://gitee.com/ulthon/ulthon_information.git
synced 2026-07-01 14:52:48 +08:00
fix: 修复上传文件处理和粘贴图片URL替换的问题
- 修复 UploadFiles 中 $request->file() 可能返回 null 导致类型错误的问题,确保 $files 始终为数组 - 优化粘贴外部图片 URL 处理逻辑,使用正则匹配提取所有外部 URL 后统一延迟处理,避免替换错误 - 增加 URL 转义处理,防止特殊字符在正则替换时出错
This commit is contained in:
@@ -156,7 +156,10 @@ class UploadFiles
|
||||
}
|
||||
$dir_name = $request->param('dir', $type);
|
||||
|
||||
$files = $request->file();
|
||||
$files = $request->file('file') ?? [];
|
||||
if (!is_array($files)) {
|
||||
$files = [$files];
|
||||
}
|
||||
$succMap = [];
|
||||
$errFiles = [];
|
||||
|
||||
|
||||
@@ -156,55 +156,49 @@
|
||||
});
|
||||
|
||||
// 外部 URL 图片粘贴处理
|
||||
// Vditor 粘贴 HTML 时会将 <img> 转为 Markdown 图片语法
|
||||
// 需要延迟等待 Vditor 完成粘贴解析后,再替换外部 URL 为本地 URL
|
||||
document.addEventListener('paste', function (e) {
|
||||
var pasteStr = e.clipboardData.getData('text/html');
|
||||
if (!pasteStr) return;
|
||||
|
||||
var imgReg = /<img.*?(?:>|\/>)/gi;
|
||||
var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;
|
||||
var arr = pasteStr.match(imgReg);
|
||||
var imgReg = /<img[^>]*src=[\'\"]?([^\'\"]*)[\'\"]?/gi;
|
||||
var externalUrls = [];
|
||||
var match;
|
||||
while ((match = imgReg.exec(pasteStr)) !== null) {
|
||||
if (match[1] && match[1].substr(0, 4) === 'http') {
|
||||
externalUrls.push(match[1]);
|
||||
}
|
||||
}
|
||||
if (externalUrls.length === 0) return;
|
||||
|
||||
if (!arr || arr.length === 0) return;
|
||||
setTimeout(function () {
|
||||
var pending = externalUrls.length;
|
||||
layer.load();
|
||||
|
||||
layer.load();
|
||||
var pending = arr.length;
|
||||
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
(function (imgTag) {
|
||||
var src = imgTag.match(srcReg);
|
||||
if (src && src[1]) {
|
||||
var imgSrc = src[1];
|
||||
if (imgSrc.substr(0, 4) === 'http') {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: "{:url('File/urlSave')}",
|
||||
data: { url: imgSrc, type: 'editor' },
|
||||
success: function (result) {
|
||||
if (result.code === 0) {
|
||||
var mdImg = '';
|
||||
var oldMdImg = '';
|
||||
var current = vditor.getValue();
|
||||
vditor.setValue(current.replace(oldMdImg, mdImg));
|
||||
}
|
||||
pending--;
|
||||
if (pending === 0) layer.closeAll('loading');
|
||||
},
|
||||
error: function () {
|
||||
pending--;
|
||||
if (pending === 0) layer.closeAll('loading');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
externalUrls.forEach(function (url) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: "{:url('File/urlSave')}",
|
||||
data: { url: url, type: 'editor' },
|
||||
success: function (result) {
|
||||
if (result.code === 0) {
|
||||
var escapedUrl = url.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||
var regex = new RegExp('!\\[[^\\]]*\\]\\(' + escapedUrl + '\\)', 'g');
|
||||
var current = vditor.getValue();
|
||||
vditor.setValue(current.replace(regex, ''));
|
||||
}
|
||||
pending--;
|
||||
if (pending === 0) layer.closeAll('loading');
|
||||
},
|
||||
error: function () {
|
||||
pending--;
|
||||
if (pending === 0) layer.closeAll('loading');
|
||||
}
|
||||
} else {
|
||||
pending--;
|
||||
if (pending === 0) layer.closeAll('loading');
|
||||
}
|
||||
})(arr[i]);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}, 800);
|
||||
}, true);
|
||||
|
||||
// 标题变更保存
|
||||
$('#title-input').change(function () {
|
||||
|
||||
Reference in New Issue
Block a user