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>);