// 'src\API\bodyPosition.ts' 提供方法,得到示意图完整路径,输入是view_icon_name,本质是个url path,输出是个完整的url,算法是拼接'src\API\config.ts' 提供的base url和“/pub”和view_icon_name import { API_BASE_URL } from './config'; /** * 意图 * @param viewIconName view_icon_name的值 * @description 这个方法用于获取view_icon_name的完整URL路径 * @returns */ export function getViewIconUrl(viewIconName: string): string { return `${API_BASE_URL}pub${viewIconName}`; } /** * 得到exposed image的完整URL路径 * @param sopInstanceUid * @returns */ export function getExposedImageUrl(sopInstanceUid: string): string { return `${API_BASE_URL}pub/thumbnail/${sopInstanceUid}.jpg`; } export function getDcmImageUrl(sopInstanceUid: string): string { return `dicomweb:${API_BASE_URL}pub/dcm/${sopInstanceUid}.dcm`; } export function getSopInstanceUidFromUrl(url: string): string { if (!url.startsWith('dicomweb:')) { throw new Error('Invalid URL format: must start with "dicomweb:"'); } const path = url.substring('dicomweb:'.length); const segments = path.split('/').filter(Boolean); // 移除空段 // 查找 'dcm' 段的位置 const dcmIndex = segments.indexOf('dcm'); if (dcmIndex === -1) { throw new Error('Invalid path format: expected "/dcm/{sopInstanceUid}.dcm" segment'); } // 下一个段应该是 {sopInstanceUid}.dcm if (dcmIndex + 1 >= segments.length) { throw new Error('Invalid path format: missing file name after "dcm"'); } const filename = segments[dcmIndex + 1]; if (!filename.endsWith('.dcm')) { throw new Error('Invalid file extension: expected ".dcm"'); } const sopInstanceUid = filename.slice(0, -4); // 移除 .dcm if (!sopInstanceUid) { throw new Error('Empty SOP Instance UID'); } return sopInstanceUid; }