fix(orthanc): Correct bulkdata URL handling and add configuration example PDF (#4262)

This commit is contained in:
Bill Wallace 2024-06-26 12:26:00 -04:00 committed by GitHub
parent bea56d4f66
commit fdf883ada8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 6 deletions

View File

@ -20,26 +20,36 @@ function fixBulkDataURI(value, instance, dicomWebConfig) {
// in case of the relative path, make it absolute. The current DICOM standard says // 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 // the bulkdataURI is relative to the series. However, there are situations where
// it can be relative to the study too // 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('/')) { if (!BulkDataURI.startsWith('http') && !value.BulkDataURI.startsWith('/')) {
const { StudyInstanceUID, SeriesInstanceUID } = instance; const { StudyInstanceUID, SeriesInstanceUID } = instance;
const isInstanceStart = BulkDataURI.startsWith('instances/') || BulkDataURI.startsWith('../'); const isInstanceStart = BulkDataURI.startsWith('instances/') || BulkDataURI.startsWith('../');
if ( if (
BulkDataURI.startsWith('series/') || BulkDataURI.startsWith('series/') ||
BulkDataURI.startsWith('bulkdata/') || BulkDataURI.startsWith('bulkdata/') ||
(dicomWebConfig.bulkDataURI?.relativeResolution === 'studies' && isInstanceStart) (uriConfig.relativeResolution === 'studies' && isInstanceStart)
) { ) {
value.BulkDataURI = `${dicomWebConfig.wadoRoot}/studies/${StudyInstanceUID}/${BulkDataURI}`; value.BulkDataURI = `${dicomWebConfig.wadoRoot}/studies/${StudyInstanceUID}/${BulkDataURI}`;
} else if ( } else if (
isInstanceStart || isInstanceStart ||
dicomWebConfig.bulkDataURI?.relativeResolution === 'series' || uriConfig.relativeResolution === 'series' ||
!dicomWebConfig.bulkDataURI?.relativeResolution !uriConfig.relativeResolution
) { ) {
value.BulkDataURI = `${dicomWebConfig.wadoRoot}/studies/${StudyInstanceUID}/series/${SeriesInstanceUID}/${BulkDataURI}`; value.BulkDataURI = `${dicomWebConfig.wadoRoot}/studies/${StudyInstanceUID}/series/${SeriesInstanceUID}/${BulkDataURI}`;
} }
return; return;
} }
// in case it is relative path but starts at the server (e.g., /bulk/1e, note the missing http // 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 // 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 // is absolute or relative. In case of absolute, we need to prepend the wado root to the bulkdata

View File

@ -14,11 +14,11 @@ window.config = {
showCPUFallbackMessage: true, showCPUFallbackMessage: true,
strictZSpacingForVolumeViewport: true, strictZSpacingForVolumeViewport: true,
// filterQueryParam: false, // filterQueryParam: false,
defaultDataSourceName: 'dicomweb', defaultDataSourceName: 'orthanc',
dataSources: [ dataSources: [
{ {
namespace: '@ohif/extension-default.dataSourcesModule.dicomweb', namespace: '@ohif/extension-default.dataSourcesModule.dicomweb',
sourceName: 'dicomweb', sourceName: 'orthanc',
configuration: { configuration: {
friendlyName: 'local Orthanc DICOMWeb Server', friendlyName: 'local Orthanc DICOMWeb Server',
name: 'DCM4CHEE', name: 'DCM4CHEE',
@ -37,6 +37,17 @@ window.config = {
omitQuotationForMultipartRequest: true, omitQuotationForMultipartRequest: true,
bulkDataURI: { bulkDataURI: {
enabled: true, 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/',
}, },
}, },
}, },