comparison OrthancServer/OrthancRestApi.cpp @ 291:4d7469f72a0b

embedding of dicom dictionaries
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 14 Dec 2012 15:15:48 +0100
parents 4031f73fe0e4
children f13eef8ce651
comparison
equal deleted inserted replaced
290:b3322636b06d 291:4d7469f72a0b
756 static void UploadDicomFile(RestApi::PostCall& call) 756 static void UploadDicomFile(RestApi::PostCall& call)
757 { 757 {
758 RETRIEVE_CONTEXT(call); 758 RETRIEVE_CONTEXT(call);
759 759
760 const std::string& postData = call.GetPostBody(); 760 const std::string& postData = call.GetPostBody();
761 if (postData.size() == 0)
762 {
763 return;
764 }
761 765
762 LOG(INFO) << "Receiving a DICOM file of " << postData.size() << " bytes through HTTP"; 766 LOG(INFO) << "Receiving a DICOM file of " << postData.size() << " bytes through HTTP";
763 767
764 // Prepare an input stream for the memory buffer 768 DcmFileFormat dicomFile;
765 DcmInputBufferStream is; 769
766 if (postData.size() > 0) 770 {
767 { 771 // Prepare an input stream for the memory buffer
772 DcmInputBufferStream is;
768 is.setBuffer(&postData[0], postData.size()); 773 is.setBuffer(&postData[0], postData.size());
769 } 774 is.setEos();
770 is.setEos(); 775
771 776 dicomFile.transferInit();
772 DcmFileFormat dicomFile; 777 if (!dicomFile.read(is).good())
773 if (!dicomFile.read(is).good()) 778 {
774 { 779 call.GetOutput().SignalError(Orthanc_HttpStatus_415_UnsupportedMediaType);
775 call.GetOutput().SignalError(Orthanc_HttpStatus_415_UnsupportedMediaType); 780 return;
776 return; 781 }
782 dicomFile.loadAllDataIntoMemory();
783 dicomFile.transferEnd();
777 } 784 }
778 785
779 DicomMap dicomSummary; 786 DicomMap dicomSummary;
780 FromDcmtkBridge::Convert(dicomSummary, *dicomFile.getDataset()); 787 FromDcmtkBridge::Convert(dicomSummary, *dicomFile.getDataset());
781 788
786 793
787 StoreStatus status = StoreStatus_Failure; 794 StoreStatus status = StoreStatus_Failure;
788 if (postData.size() > 0) 795 if (postData.size() > 0)
789 { 796 {
790 status = context.Store 797 status = context.Store
791 (reinterpret_cast<const char*>(&postData[0]), 798 (reinterpret_cast<const char*>(&postData[0]), postData.size(),
792 postData.size(), dicomSummary, dicomJson, ""); 799 dicomSummary, dicomJson, "");
793 } 800 }
794 801
795 Json::Value result = Json::objectValue; 802 Json::Value result = Json::objectValue;
796 803
797 if (status != StoreStatus_Failure) 804 if (status != StoreStatus_Failure)
798 { 805 {