1- import { multipartEncode , multipartDecode } from './message.js' ;
2-
3-
1+ import { multipartEncode , multipartDecode , addHeaders } from './message.js' ;
42
53function isObject ( obj ) {
64 return typeof obj === 'object' && obj !== null ;
@@ -225,7 +223,7 @@ class DICOMwebClient {
225223 let requestInstance = request . instance ? request . instance : new XMLHttpRequest ( ) ;
226224
227225 requestInstance . open ( method , url , true ) ;
228- if ( 'responseType' in request ) {
226+ if ( request . responseType ) {
229227 requestInstance . responseType = request . responseType ;
230228 }
231229
@@ -256,12 +254,16 @@ class DICOMwebClient {
256254 requestInstance . onreadystatechange = ( ) => {
257255 if ( requestInstance . readyState === 4 ) {
258256 if ( requestInstance . status === 200 ) {
259- const contentType = requestInstance . getResponseHeader ( 'Content-Type' ) ;
257+ const contentType = requestInstance . getResponseHeader (
258+ 'Content-Type' ,
259+ ) ;
260+ const headers = requestInstance . getAllResponseHeaders ( ) ;
260261 // Automatically distinguishes between multipart and singlepart in an array buffer, and
261262 // converts them into a consistent type.
262263 if ( contentType && contentType . indexOf ( 'multipart' ) !== - 1 ) {
263264 resolve ( multipartDecode ( requestInstance . response ) ) ;
264265 } else if ( requestInstance . responseType === 'arraybuffer' ) {
266+ addHeaders ( requestInstance . response , headers ) ;
265267 resolve ( [ requestInstance . response ] ) ;
266268 } else {
267269 resolve ( requestInstance . response ) ;
@@ -295,10 +297,8 @@ class DICOMwebClient {
295297 } ;
296298
297299 // Event triggered while download progresses
298- if ( 'progressCallback' in request ) {
299- if ( typeof request . progressCallback === 'function' ) {
300- requestInstance . onprogress = request . progressCallback ;
301- }
300+ if ( typeof request . progressCallback === 'function' ) {
301+ requestInstance . onprogress = request . progressCallback ;
302302 }
303303
304304 if ( requestHooks && areValidRequestHooks ( requestHooks ) ) {
@@ -311,13 +311,11 @@ class DICOMwebClient {
311311 }
312312
313313 // Add withCredentials to request if needed
314- if ( 'withCredentials' in request ) {
315- if ( request . withCredentials ) {
316- requestInstance . withCredentials = true ;
317- }
314+ if ( request . withCredentials ) {
315+ requestInstance . withCredentials = true ;
318316 }
319317
320- if ( 'data' in request ) {
318+ if ( request . data ) {
321319 requestInstance . send ( request . data ) ;
322320 } else {
323321 requestInstance . send ( ) ;
@@ -594,6 +592,7 @@ class DICOMwebClient {
594592 'image/gif' ,
595593 'image/png' ,
596594 'image/jp2' ,
595+ 'image/*' ,
597596 ] ;
598597 } else {
599598 supportedMediaTypes = {
@@ -608,6 +607,7 @@ class DICOMwebClient {
608607 '1.2.840.10008.1.2.4.91' : [ 'image/jp2' ] ,
609608 '1.2.840.10008.1.2.4.92' : [ 'image/jpx' ] ,
610609 '1.2.840.10008.1.2.4.93' : [ 'image/jpx' ] ,
610+ '*' : [ 'image/*' ] ,
611611 } ;
612612
613613 if ( byteRange ) {
@@ -961,7 +961,7 @@ class DICOMwebClient {
961961 } ) ;
962962
963963 if ( ! fieldValueParts . length ) {
964- throw new Error ( `No acceptable media types found among ${ JSON . stringify ( mediaTypes ) } ` ) ;
964+ throw new Error ( `No acceptable media types found among ${ JSON . stringify ( mediaTypes ) } testing against ${ JSON . stringify ( acceptableMediaTypes ) } ` ) ;
965965 }
966966
967967 return fieldValueParts . join ( ', ' ) ;
@@ -1227,7 +1227,7 @@ class DICOMwebClient {
12271227 debugLog ( `retrieve metadata of instance ${ options . sopInstanceUID } ` ) ;
12281228 const url = `${ this . wadoURL } /studies/${ options . studyInstanceUID } /series/${ options . seriesInstanceUID } /instances/${ options . sopInstanceUID } /metadata` ;
12291229
1230- const request = getRequestOptions ( options . request )
1230+ const request = getRequestOptions ( options . request ) ;
12311231 return this . _httpGetApplicationJson ( url , { } , request ) ;
12321232 }
12331233
@@ -1276,6 +1276,7 @@ class DICOMwebClient {
12761276 const { mediaTypes } = options ;
12771277
12781278 const request = getRequestOptions ( options . request )
1279+ request . responseType = 'arraybuffer' ;
12791280
12801281 if ( ! mediaTypes ) {
12811282 return this . _httpGetMultipartApplicationOctetStream (
@@ -1317,7 +1318,6 @@ class DICOMwebClient {
13171318 supportedMediaTypes ,
13181319 ) ,
13191320 } ;
1320- request . responseType = 'arraybuffer' ;
13211321 return this . _httpGet ( url , headers , request ) ;
13221322 }
13231323
0 commit comments