接入桌面壳图片导入能力

新增 file.importImage 与 file.imageDropped HostBridge 能力

Tauri 壳通过系统图片选择和主窗口拖拽读取真实图片文件

H5 统一使用导入图片与拖入图片事件 facade

限制图片 MIME 与大小并避免暴露本机绝对路径

更新壳能力校验、测试和架构文档
This commit is contained in:
2026-06-18 02:52:37 +08:00
parent 586e46fa63
commit 199f02cf9f
10 changed files with 418 additions and 4 deletions

View File

@@ -54,6 +54,8 @@ describe('HostBridge shared contract helpers', () => {
expect(isHostBridgeCapability('app.lifecycle')).toBe(true);
expect(isHostBridgeCapability('network.status')).toBe(true);
expect(isHostBridgeCapability('network.statusChanged')).toBe(true);
expect(isHostBridgeCapability('file.importImage')).toBe(true);
expect(isHostBridgeCapability('file.imageDropped')).toBe(true);
expect(isHostBridgeCapability('app.setBadgeCount')).toBe(true);
expect(isHostBridgeCapability('navigation.canGoBack')).toBe(true);
expect(isHostBridgeCapability('unknown.capability')).toBe(false);

View File

@@ -28,6 +28,7 @@ export const HOST_BRIDGE_METHODS = [
'clipboard.writeText',
'file.exportText',
'file.exportImage',
'file.importImage',
'haptics.impact',
] as const;
@@ -38,6 +39,7 @@ export const HOST_BRIDGE_CAPABILITIES = [
'host.events',
'app.lifecycle',
'network.statusChanged',
'file.imageDropped',
'navigation.canGoBack',
] as const;
@@ -281,6 +283,23 @@ export type FileExportImageResult = {
bytes: number;
};
export type HostBridgeImageMimeType =
| 'image/png'
| 'image/jpeg'
| 'image/webp';
export type FileImportImageResult = {
action: 'selected' | 'dropped';
fileName: string;
base64Data: string;
mimeType: HostBridgeImageMimeType;
bytes: number;
position?: {
x: number;
y: number;
};
};
export type HapticsImpactPayload = {
style?: 'light' | 'medium' | 'heavy';
};