diff --git a/src/components/BootstrapBlazor.SummerNote/BootstrapBlazor.SummerNote.csproj b/src/components/BootstrapBlazor.SummerNote/BootstrapBlazor.SummerNote.csproj index bd3df802..365eadf5 100644 --- a/src/components/BootstrapBlazor.SummerNote/BootstrapBlazor.SummerNote.csproj +++ b/src/components/BootstrapBlazor.SummerNote/BootstrapBlazor.SummerNote.csproj @@ -1,7 +1,7 @@ - 9.0.5 + 9.0.6 diff --git a/src/components/BootstrapBlazor.SummerNote/Components/Editor/Editor.razor.cs b/src/components/BootstrapBlazor.SummerNote/Components/Editor/Editor.razor.cs index afc42478..b8691a94 100644 --- a/src/components/BootstrapBlazor.SummerNote/Components/Editor/Editor.razor.cs +++ b/src/components/BootstrapBlazor.SummerNote/Components/Editor/Editor.razor.cs @@ -64,7 +64,7 @@ public partial class Editor /// 获得/设置 Editor 组件内上传文件时回调此方法 /// [Parameter] - public Func? OnFileUpload { get; set; } + public Func>? OnFileUpload { get; set; } private bool _lastShowSubmit = true; @@ -270,14 +270,16 @@ public async Task ClickPluginItem(string pluginItemName) /// /// [JSInvokable] - public async Task ImageUpload(string name, string contentType, long size, IJSStreamReference stream) + public async Task ImageUpload(string name, string contentType, long size, IJSStreamReference stream) { - var data = await stream.OpenReadStreamAsync(size); + string? ret = null; + await using var data = await stream.OpenReadStreamAsync(size); var file = new EditorUploadFile(name, contentType, size, data); if (OnFileUpload != null) { - await OnFileUpload(file); + ret = await OnFileUpload(file); } + return ret ?? ""; } /// diff --git a/src/components/BootstrapBlazor.SummerNote/Components/Editor/Editor.razor.js b/src/components/BootstrapBlazor.SummerNote/Components/Editor/Editor.razor.js index 0a0c4cb6..3805cf48 100644 --- a/src/components/BootstrapBlazor.SummerNote/Components/Editor/Editor.razor.js +++ b/src/components/BootstrapBlazor.SummerNote/Components/Editor/Editor.razor.js @@ -51,17 +51,16 @@ export async function init(id, invoker, methodGetPluginAttrs, methodClickPluginI editor.files = files for (let i = 0; i < files.length; i++) { const file = files[i]; - const image = createImage(file); - editor.$editor.summernote('insertNode', image); - const buffer = await file.arrayBuffer(); const stream = DotNet.createJSStreamReference(buffer); - await editor.invoker.invokeMethodAsync('ImageUpload', + const url = await editor.invoker.invokeMethodAsync('ImageUpload', file.name, file.type || 'application/octet-stream', file.size, stream ) + const image = createImage(file, url); + editor.$editor.summernote('insertNode', image); } } } @@ -220,9 +219,9 @@ export function dispose(id) { } } -const createImage = file => { +const createImage = (file, url) => { const element = document.createElement('img'); - element.src = URL.createObjectURL(file); + element.src = url || URL.createObjectURL(file); return element; }