changeset 6:1e000761eb62

added gzip compression of nifti
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 25 Apr 2022 16:09:07 +0200
parents ef6ddcfed855
children c91e2383a5a6
files Sources/Plugin/Plugin.cpp
diffstat 1 files changed, 36 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/Sources/Plugin/Plugin.cpp	Mon Apr 25 14:57:58 2022 +0200
+++ b/Sources/Plugin/Plugin.cpp	Mon Apr 25 16:09:07 2022 +0200
@@ -149,7 +149,22 @@
 
   return instance.release();
 #endif
-}  
+}
+
+
+static bool HasBooleanFlag(const OrthancPluginHttpRequest* request,
+                           const std::string& flag)
+{
+  for (uint32_t i = 0; i < request->getCount; i++)
+  {
+    if (std::string(request->getKeys[i]) == flag)
+    {
+      return true;
+    }
+  }
+
+  return false;
+}
 
 
 void SeriesToNifti(OrthancPluginRestOutput* output,
@@ -196,10 +211,18 @@
       }
     }
 
+    const bool compress = HasBooleanFlag(request, "compress");
+
     std::string nifti;
-    CreateNifti(nifti, collection, false /* todo - compress */);
+    CreateNifti(nifti, collection, compress);
 
-    const std::string contentDisposition = "filename=\"" + seriesId + ".nii\"";
+    std::string filename = seriesId + ".nii";
+    if (compress)
+    {
+      filename += ".gz";
+    }
+    
+    const std::string contentDisposition = "filename=\"" + filename + "\"";
     OrthancPluginSetHttpHeader(context, output, "Content-Disposition", contentDisposition.c_str());
   
     OrthancPluginAnswerBuffer(context, output, nifti.c_str(), nifti.size(), "application/octet-stream");
@@ -224,10 +247,18 @@
     Neuro::DicomInstancesCollection collection;
     collection.AddInstance(AcquireInstance(instanceId), instanceId);
 
+    const bool compress = HasBooleanFlag(request, "compress");
+
     std::string nifti;
-    CreateNifti(nifti, collection, false /* todo - compress */);
+    CreateNifti(nifti, collection, compress);
 
-    const std::string contentDisposition = "filename=\"" + instanceId + ".nii\"";
+    std::string filename = instanceId + ".nii";
+    if (compress)
+    {
+      filename += ".gz";
+    }
+
+    const std::string contentDisposition = "filename=\"" + filename + "\"";
     OrthancPluginSetHttpHeader(context, output, "Content-Disposition", contentDisposition.c_str());
   
     OrthancPluginAnswerBuffer(context, output, nifti.c_str(), nifti.size(), "application/octet-stream");