Mercurial > hg > orthanc
diff OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp @ 5426:c65e036d649b
StorageCache is now storing transcoded instances + added ?transcode=... option to the /file route.
author | Alain Mazy <am@osimis.io> |
---|---|
date | Thu, 16 Nov 2023 16:09:04 +0100 |
parents | 630d0195e3bb |
children | 111e21b4f8bc |
line wrap: on
line diff
--- a/OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp Wed Nov 15 08:58:45 2023 +0100 +++ b/OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp Thu Nov 16 16:09:04 2023 +0100 @@ -361,6 +361,8 @@ static void GetInstanceFile(RestApiGetCall& call) { + static const char* const TRANSCODE = "transcode"; + if (call.IsDocumentation()) { call.GetDocumentation() @@ -369,6 +371,9 @@ .SetDescription("Download one DICOM instance") .SetUriArgument("id", "Orthanc identifier of the DICOM instance of interest") .SetHttpHeader("Accept", "This HTTP header can be set to retrieve the DICOM instance in DICOMweb format") + .SetHttpGetArgument(TRANSCODE, RestApiCallDocumentation::Type_String, + "If present, the DICOM file will be transcoded to the provided " + "transfer syntax: https://book.orthanc-server.com/faq/transcoding.html", false) .AddAnswerType(MimeType_Dicom, "The DICOM instance") .AddAnswerType(MimeType_DicomWebJson, "The DICOM instance, in DICOMweb JSON format") .AddAnswerType(MimeType_DicomWebXml, "The DICOM instance, in DICOMweb XML format"); @@ -417,7 +422,22 @@ } } - context.AnswerAttachment(call.GetOutput(), publicId, FileContentType_Dicom); + if (call.HasArgument(TRANSCODE)) + { + std::string source; + std::string transcoded; + context.ReadDicom(source, publicId); + + if (context.TranscodeWithCache(transcoded, source, publicId, GetTransferSyntax(call.GetArgument(TRANSCODE, "")))) + { + call.GetOutput().AnswerBuffer(transcoded, MimeType_Dicom); + } + } + else + { + // return the attachment without any transcoding + context.AnswerAttachment(call.GetOutput(), publicId, FileContentType_Dicom); + } }