Mercurial > hg > orthanc
comparison OrthancServer/OrthancRestApi/OrthancRestResources.cpp @ 2408:26a0cc24d48d
New URI: "/instances/.../frames/.../raw.gz" to compress raw frames using gzip
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 25 Sep 2017 14:50:13 +0200 |
parents | 7284093111b0 |
children | e4045b3c9772 |
comparison
equal
deleted
inserted
replaced
2407:5edec967055e | 2408:26a0cc24d48d |
---|---|
32 | 32 |
33 | 33 |
34 #include "../PrecompiledHeadersServer.h" | 34 #include "../PrecompiledHeadersServer.h" |
35 #include "OrthancRestApi.h" | 35 #include "OrthancRestApi.h" |
36 | 36 |
37 #include "../../Core/Compression/GzipCompressor.h" | |
38 #include "../../Core/DicomParsing/FromDcmtkBridge.h" | |
39 #include "../../Core/DicomParsing/Internals/DicomImageDecoder.h" | |
37 #include "../../Core/HttpServer/HttpContentNegociation.h" | 40 #include "../../Core/HttpServer/HttpContentNegociation.h" |
38 #include "../../Core/Logging.h" | 41 #include "../../Core/Logging.h" |
39 #include "../../Core/DicomParsing/FromDcmtkBridge.h" | |
40 #include "../../Core/DicomParsing/Internals/DicomImageDecoder.h" | |
41 #include "../OrthancInitialization.h" | 42 #include "../OrthancInitialization.h" |
42 #include "../Search/LookupResource.h" | 43 #include "../Search/LookupResource.h" |
43 #include "../ServerContext.h" | 44 #include "../ServerContext.h" |
44 #include "../ServerToolbox.h" | 45 #include "../ServerToolbox.h" |
45 #include "../SliceOrdering.h" | 46 #include "../SliceOrdering.h" |
495 | 496 |
496 call.GetOutput().AnswerBuffer(result, "text/plain"); | 497 call.GetOutput().AnswerBuffer(result, "text/plain"); |
497 } | 498 } |
498 | 499 |
499 | 500 |
500 | 501 template <bool GzipCompression> |
501 static void GetRawFrame(RestApiGetCall& call) | 502 static void GetRawFrame(RestApiGetCall& call) |
502 { | 503 { |
503 std::string frameId = call.GetUriComponent("frame", "0"); | 504 std::string frameId = call.GetUriComponent("frame", "0"); |
504 | 505 |
505 unsigned int frame; | 506 unsigned int frame; |
518 { | 519 { |
519 ServerContext::DicomCacheLocker locker(OrthancRestApi::GetContext(call), publicId); | 520 ServerContext::DicomCacheLocker locker(OrthancRestApi::GetContext(call), publicId); |
520 locker.GetDicom().GetRawFrame(raw, mime, frame); | 521 locker.GetDicom().GetRawFrame(raw, mime, frame); |
521 } | 522 } |
522 | 523 |
523 call.GetOutput().AnswerBuffer(raw, mime); | 524 if (GzipCompression) |
525 { | |
526 GzipCompressor gzip; | |
527 std::string compressed; | |
528 gzip.Compress(compressed, raw.empty() ? NULL : raw.c_str(), raw.size()); | |
529 call.GetOutput().AnswerBuffer(compressed, "application/gzip"); | |
530 } | |
531 else | |
532 { | |
533 call.GetOutput().AnswerBuffer(raw, mime); | |
534 } | |
524 } | 535 } |
525 | 536 |
526 | 537 |
527 | 538 |
528 static void GetResourceStatistics(RestApiGetCall& call) | 539 static void GetResourceStatistics(RestApiGetCall& call) |
1471 Register("/instances/{id}/frames/{frame}/preview", GetImage<ImageExtractionMode_Preview>); | 1482 Register("/instances/{id}/frames/{frame}/preview", GetImage<ImageExtractionMode_Preview>); |
1472 Register("/instances/{id}/frames/{frame}/image-uint8", GetImage<ImageExtractionMode_UInt8>); | 1483 Register("/instances/{id}/frames/{frame}/image-uint8", GetImage<ImageExtractionMode_UInt8>); |
1473 Register("/instances/{id}/frames/{frame}/image-uint16", GetImage<ImageExtractionMode_UInt16>); | 1484 Register("/instances/{id}/frames/{frame}/image-uint16", GetImage<ImageExtractionMode_UInt16>); |
1474 Register("/instances/{id}/frames/{frame}/image-int16", GetImage<ImageExtractionMode_Int16>); | 1485 Register("/instances/{id}/frames/{frame}/image-int16", GetImage<ImageExtractionMode_Int16>); |
1475 Register("/instances/{id}/frames/{frame}/matlab", GetMatlabImage); | 1486 Register("/instances/{id}/frames/{frame}/matlab", GetMatlabImage); |
1476 Register("/instances/{id}/frames/{frame}/raw", GetRawFrame); | 1487 Register("/instances/{id}/frames/{frame}/raw", GetRawFrame<false>); |
1488 Register("/instances/{id}/frames/{frame}/raw.gz", GetRawFrame<true>); | |
1477 Register("/instances/{id}/pdf", ExtractPdf); | 1489 Register("/instances/{id}/pdf", ExtractPdf); |
1478 Register("/instances/{id}/preview", GetImage<ImageExtractionMode_Preview>); | 1490 Register("/instances/{id}/preview", GetImage<ImageExtractionMode_Preview>); |
1479 Register("/instances/{id}/image-uint8", GetImage<ImageExtractionMode_UInt8>); | 1491 Register("/instances/{id}/image-uint8", GetImage<ImageExtractionMode_UInt8>); |
1480 Register("/instances/{id}/image-uint16", GetImage<ImageExtractionMode_UInt16>); | 1492 Register("/instances/{id}/image-uint16", GetImage<ImageExtractionMode_UInt16>); |
1481 Register("/instances/{id}/image-int16", GetImage<ImageExtractionMode_Int16>); | 1493 Register("/instances/{id}/image-int16", GetImage<ImageExtractionMode_Int16>); |