refactor: extract media upload runtime helper

This commit is contained in:
lix-2026
2026-05-25 01:52:11 +08:00
parent 29a8e5e109
commit 715ee4c602
3 changed files with 50 additions and 13 deletions
@@ -183,6 +183,26 @@ async function uploadLocalFolderAsset(file, plan, context) {
};
}
async function uploadMediaAsset(file, plan, context) {
var form = new FormData();
form.append('file', file);
form.append('workspaceId', plan && plan.workspaceId || '');
form.append('documentId', plan && plan.targetDocumentId || '');
if (plan && plan.targetMindmapId) form.append('mindmapId', plan.targetMindmapId);
var response = await fetchWithTimeout('/api/media/upload', {
method: 'POST',
credentials: 'include',
body: form
}, Number(context && context.timeoutMs) || 15000, '上传');
var payload = await response.json().catch(function() { return null; });
if (!response.ok || !payload || !payload.asset) {
throw new Error(payload && payload.error ? payload.error : '上传失败');
}
return {
asset: payload.asset
};
}
async function insertUploadedAssetIntoEditor(asset, targetRoot, deps) {
deps = deps || {};
var editorRoot = targetRoot instanceof HTMLElement
@@ -408,6 +428,7 @@ window.__mnoteLocalUploadRuntime = {
openEditorUploadFilePicker: openEditorUploadFilePicker,
fetchWithTimeout: fetchWithTimeout,
uploadLocalFolderAsset: uploadLocalFolderAsset,
uploadMediaAsset: uploadMediaAsset,
insertUploadedAssetIntoEditor: insertUploadedAssetIntoEditor,
localAssetOpenUrl: localAssetOpenUrl,
uploadedAssetType: uploadedAssetType,
+25 -13
View File
@@ -4058,19 +4058,29 @@ const SIDEBAR_TREE_JS: &str = r##"
}));
return localPayload.asset;
}
var form = new FormData();
form.append('file', file);
form.append('workspaceId', plan.workspaceId);
form.append('documentId', plan.targetDocumentId);
if (plan.targetMindmapId) form.append('mindmapId', plan.targetMindmapId);
var response = await fetchWithTimeout('/api/media/upload', {
method: 'POST',
credentials: 'include',
body: form
}, 15000, '');
var payload = await response.json().catch(function() { return null; });
if (!response.ok || !payload || !payload.asset) {
throw new Error(payload && payload.error ? payload.error : '');
var mediaUploadRuntime = localUploadRuntimeFunction('uploadMediaAsset');
var payload = null;
if (mediaUploadRuntime) {
var mediaResult = await mediaUploadRuntime(file, plan, { timeoutMs: 15000 });
payload = mediaResult && mediaResult.asset ? { asset: mediaResult.asset } : null;
if (!payload || !payload.asset) {
throw new Error('');
}
} else {
var form = new FormData();
form.append('file', file);
form.append('workspaceId', plan.workspaceId);
form.append('documentId', plan.targetDocumentId);
if (plan.targetMindmapId) form.append('mindmapId', plan.targetMindmapId);
var response = await fetchWithTimeout('/api/media/upload', {
method: 'POST',
credentials: 'include',
body: form
}, 15000, '');
payload = await response.json().catch(function() { return null; });
if (!response.ok || !payload || !payload.asset) {
throw new Error(payload && payload.error ? payload.error : '');
}
}
appendUploadedAssetRow(payload.asset, plan.targetDocumentId);
if (options && options.insertIntoEditor) {
@@ -10954,6 +10964,7 @@ mod tests {
assert!(
SIDEBAR_TREE_JS.contains("localUploadRuntimeFunction('insertUploadedAssetIntoEditor')")
);
assert!(SIDEBAR_TREE_JS.contains("localUploadRuntimeFunction('uploadMediaAsset')"));
assert!(SIDEBAR_TREE_JS.contains("__mnoteLastEditorUploadRoot"));
assert!(SIDEBAR_TREE_JS.contains("data-pane-role=\"primary\""));
assert!(SIDEBAR_TREE_JS.contains("insertUploadedAssetIntoEditor(localPayload.asset, editorRootFromUploadOptions(options))"));
@@ -10969,6 +10980,7 @@ mod tests {
assert!(LOCAL_UPLOAD_RUNTIME_JS.contains("function openEditorUploadFilePicker"));
assert!(LOCAL_UPLOAD_RUNTIME_JS.contains("function fetchWithTimeout"));
assert!(LOCAL_UPLOAD_RUNTIME_JS.contains("function uploadLocalFolderAsset"));
assert!(LOCAL_UPLOAD_RUNTIME_JS.contains("function uploadMediaAsset"));
assert!(LOCAL_UPLOAD_RUNTIME_JS.contains("function insertUploadedAssetIntoEditor"));
assert!(LOCAL_UPLOAD_RUNTIME_JS.contains("data-mnote-last-upload-inserted"));
assert!(LOCAL_UPLOAD_RUNTIME_JS.contains("uploadFilesWithResolvedTarget"));