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 = '';
- 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 () {