diff --git a/extensions/default/src/DicomWebDataSource/utils/fixBulkDataURI.ts b/extensions/default/src/DicomWebDataSource/utils/fixBulkDataURI.ts index 953a7e4ce..49c622916 100644 --- a/extensions/default/src/DicomWebDataSource/utils/fixBulkDataURI.ts +++ b/extensions/default/src/DicomWebDataSource/utils/fixBulkDataURI.ts @@ -20,26 +20,36 @@ function fixBulkDataURI(value, instance, dicomWebConfig) { // in case of the relative path, make it absolute. The current DICOM standard says // the bulkdataURI is relative to the series. However, there are situations where // it can be relative to the study too - const { BulkDataURI } = value; + let { BulkDataURI } = value; + const { bulkDataURI: uriConfig = {} } = dicomWebConfig; + + // Handle incorrectly prefixed origins + const { startsWith, prefixWith = '' } = uriConfig; + if (startsWith && BulkDataURI.startsWith(startsWith)) { + BulkDataURI = prefixWith + BulkDataURI.substring(startsWith.length); + value.BulkDataURI = BulkDataURI; + } + if (!BulkDataURI.startsWith('http') && !value.BulkDataURI.startsWith('/')) { const { StudyInstanceUID, SeriesInstanceUID } = instance; const isInstanceStart = BulkDataURI.startsWith('instances/') || BulkDataURI.startsWith('../'); if ( BulkDataURI.startsWith('series/') || BulkDataURI.startsWith('bulkdata/') || - (dicomWebConfig.bulkDataURI?.relativeResolution === 'studies' && isInstanceStart) + (uriConfig.relativeResolution === 'studies' && isInstanceStart) ) { value.BulkDataURI = `${dicomWebConfig.wadoRoot}/studies/${StudyInstanceUID}/${BulkDataURI}`; } else if ( isInstanceStart || - dicomWebConfig.bulkDataURI?.relativeResolution === 'series' || - !dicomWebConfig.bulkDataURI?.relativeResolution + uriConfig.relativeResolution === 'series' || + !uriConfig.relativeResolution ) { value.BulkDataURI = `${dicomWebConfig.wadoRoot}/studies/${StudyInstanceUID}/series/${SeriesInstanceUID}/${BulkDataURI}`; } return; } + // in case it is relative path but starts at the server (e.g., /bulk/1e, note the missing http // in the beginning and the first character is /) There are two scenarios, whether the wado root // is absolute or relative. In case of absolute, we need to prepend the wado root to the bulkdata diff --git a/platform/app/public/config/local_orthanc.js b/platform/app/public/config/local_orthanc.js index 14c4b6d9c..0398a2f3c 100644 --- a/platform/app/public/config/local_orthanc.js +++ b/platform/app/public/config/local_orthanc.js @@ -14,11 +14,11 @@ window.config = { showCPUFallbackMessage: true, strictZSpacingForVolumeViewport: true, // filterQueryParam: false, - defaultDataSourceName: 'dicomweb', + defaultDataSourceName: 'orthanc', dataSources: [ { namespace: '@ohif/extension-default.dataSourcesModule.dicomweb', - sourceName: 'dicomweb', + sourceName: 'orthanc', configuration: { friendlyName: 'local Orthanc DICOMWeb Server', name: 'DCM4CHEE', @@ -37,6 +37,17 @@ window.config = { omitQuotationForMultipartRequest: true, bulkDataURI: { enabled: true, + // This is an example config that can be used to fix the retrieve URL + // where it has the wrong prefix (eg a canned prefix). It is better to + // just use the correct prefix out of the box, but that is sometimes hard + // when URLs go through several systems. + // Example URLS are: + // "BulkDataURI" : "http://localhost/dicom-web/studies/1.2.276.0.7230010.3.1.2.2344313775.14992.1458058363.6979/series/1.2.276.0.7230010.3.1.3.1901948703.36080.1484835349.617/instances/1.2.276.0.7230010.3.1.4.1901948703.36080.1484835349.618/bulk/00420011", + // when running on http://localhost:3003 with no server running on localhost. This can be corrected to: + // /orthanc/dicom-web/studies/1.2.276.0.7230010.3.1.2.2344313775.14992.1458058363.6979/series/1.2.276.0.7230010.3.1.3.1901948703.36080.1484835349.617/instances/1.2.276.0.7230010.3.1.4.1901948703.36080.1484835349.618/bulk/00420011 + // which is a valid relative URL, and will result in using the http://localhost:3003/orthanc/.... path + // startsWith: 'http://localhost/', + // prefixWith: '/orthanc/', }, }, },