diff --git a/app/UploadFiles.php b/app/UploadFiles.php index 8c380a4..234dbc5 100644 --- a/app/UploadFiles.php +++ b/app/UploadFiles.php @@ -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 = []; diff --git a/view/admin/post/edit_content_markdown.html b/view/admin/post/edit_content_markdown.html index 01b298e..7b1b1b4 100644 --- a/view/admin/post/edit_content_markdown.html +++ b/view/admin/post/edit_content_markdown.html @@ -156,55 +156,49 @@ }); // 外部 URL 图片粘贴处理 + // Vditor 粘贴 HTML 时会将 转为 Markdown 图片语法 + // 需要延迟等待 Vditor 完成粘贴解析后,再替换外部 URL 为本地 URL document.addEventListener('paste', function (e) { var pasteStr = e.clipboardData.getData('text/html'); if (!pasteStr) return; - var imgReg = /|\/>)/gi; - var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i; - var arr = pasteStr.match(imgReg); + var imgReg = /]*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 = '![](' + result.data.src + ')'; - var oldMdImg = '![](' + imgSrc + ')'; - 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, '![](' + result.data.src + ')')); + } + 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 () {