bodyPosition.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // 'src\API\bodyPosition.ts' 提供方法,得到示意图完整路径,输入是view_icon_name,本质是个url path,输出是个完整的url,算法是拼接'src\API\config.ts' 提供的base url和“/pub”和view_icon_name
  2. import { API_BASE_URL } from './config';
  3. /**
  4. * 意图
  5. * @param viewIconName view_icon_name的值
  6. * @description 这个方法用于获取view_icon_name的完整URL路径
  7. * @returns
  8. */
  9. export function getViewIconUrl(viewIconName: string): string {
  10. return `${API_BASE_URL}pub${viewIconName}`;
  11. }
  12. /**
  13. * 得到exposed image的完整URL路径
  14. * @param sopInstanceUid
  15. * @returns
  16. */
  17. export function getExposedImageUrl(sopInstanceUid: string): string {
  18. return `${API_BASE_URL}pub/thumbnail/${sopInstanceUid}.jpg`;
  19. }
  20. export function getDcmImageUrl(sopInstanceUid: string): string {
  21. return `dicomweb:${API_BASE_URL}pub/dcm/${sopInstanceUid}.dcm`;
  22. }
  23. export function getSopInstanceUidFromUrl(url: string): string {
  24. if (!url.startsWith('dicomweb:')) {
  25. throw new Error('Invalid URL format: must start with "dicomweb:"');
  26. }
  27. const path = url.substring('dicomweb:'.length);
  28. const segments = path.split('/').filter(Boolean); // 移除空段
  29. // 查找 'dcm' 段的位置
  30. const dcmIndex = segments.indexOf('dcm');
  31. if (dcmIndex === -1) {
  32. throw new Error('Invalid path format: expected "/dcm/{sopInstanceUid}.dcm" segment');
  33. }
  34. // 下一个段应该是 {sopInstanceUid}.dcm
  35. if (dcmIndex + 1 >= segments.length) {
  36. throw new Error('Invalid path format: missing file name after "dcm"');
  37. }
  38. const filename = segments[dcmIndex + 1];
  39. if (!filename.endsWith('.dcm')) {
  40. throw new Error('Invalid file extension: expected ".dcm"');
  41. }
  42. const sopInstanceUid = filename.slice(0, -4); // 移除 .dcm
  43. if (!sopInstanceUid) {
  44. throw new Error('Empty SOP Instance UID');
  45. }
  46. return sopInstanceUid;
  47. }