FileInfo StorageAccessor::Write(const void* data,
size_t size,
FileContentType type,
CompressionType compression,
bool storeMd5)
{
ParsedDicomFile pdf(data, size);
DicomWebJsonVisitor visitor;
pdf.Apply(visitor);
Json::Value v = visitor.GetResult();
v["00431028"]["BulkDataURI"] = "http://localhost/dicom-web/studies/1.2.840.113619.2.417.3.2831214628.419.1651705382.616/series/1.2.840.113619.2.417.3.2831214628.419.1651705382.622.3/instances/1.2.840.113619.2.417.3.2831214628.419.1651705382.667.1/bulk/00431028";
v["00431028"].removeMember("InlineBinary");
v["7FE00010"]["BulkDataURI"] = "http://localhost/dicom-web/studies/1.2.840.113619.2.417.3.2831214628.419.1651705382.616/series/1.2.840.113619.2.417.3.2831214628.419.1651705382.622.3/instances/1.2.840.113619.2.417.3.2831214628.419.1651705382.667.1/bulk/7fe00010";
v["7FE00010"].removeMember("InlineBinary");
Json::StreamWriterBuilder wbuilder;
wbuilder["indentation"] = ""; // Optional
std::string str = Json::writeString(wbuilder, v);
std::string strJson(str);
std::unique_ptr<DicomInstanceToStore> toStore(DicomInstanceToStore::CreateFromBuffer(data, size));
DicomMap summary2;
toStore->GetSummary(summary2);
//日期
summary2.GetValue(8, 32).GetContent();
//study instance id
summary2.GetValue(32, 13).GetContent();
// patientId 条码
summary2.GetValue(16, 32).GetContent();
// series instance id
summary2.GetValue(32, 14).GetContent();
// sop instance id
summary2.GetValue(8, 24).GetContent();
std::string subPath;
subPath += summary2.GetValue(8, 32).GetContent();
subPath += "/";
subPath += summary2.GetValue(32, 13).GetContent();
subPath += "_";
//patientId 条码
subPath += summary2.GetValue(16, 32).GetContent();
subPath += "/";
subPath += summary2.GetValue(32, 14).GetContent();
subPath += "/";
subPath += summary2.GetValue(8, 24).GetContent();
// std::string uuid = Toolbox::GenerateUuid();
std::string uuid;
uuid += subPath;
//std::string uuid = Toolbox::GenerateUuid();
std::string md5;
if (storeMd5)
{
Toolbox::ComputeMD5(md5, data, size);
}
switch (compression)
{
case CompressionType_None:
{
MetricsTimer timer(*this, METRICS_CREATE);
area_.Create(uuid, data, size, type);
if (cache_ != NULL)
{
cache_->Add(uuid, type, data, size);
}
return FileInfo(uuid, type, size, md5, strJson);
}
case CompressionType_ZlibWithSize:
{
ZlibCompressor zlib;
std::string compressed;
zlib.Compress(compressed, data, size);
std::string compressedMD5;
if (storeMd5)
{
Toolbox::ComputeMD5(compressedMD5, compressed);
}
{
MetricsTimer timer(*this, METRICS_CREATE);
if (compressed.size() > 0)
{
area_.Create(uuid, &compressed[0], compressed.size(), type);
}
else
{
area_.Create(uuid, NULL, 0, type);
}
}
if (cache_ != NULL)
{
cache_->Add(uuid, type, data, size); // always add uncompressed data to cache
}
return FileInfo(uuid, type, size, md5,
CompressionType_ZlibWithSize, compressed.size(), compressedMD5, strJson);
}
default:
throw OrthancException(ErrorCode_NotImplemented);
}
}
FileInfo StorageAccessor::Write(const void* data,
size_t size,
FileContentType type,
CompressionType compression,
bool storeMd5)
{
ParsedDicomFile pdf(data, size);
DicomWebJsonVisitor visitor;
pdf.Apply(visitor);
Json::Value v = visitor.GetResult();
v["00431028"]["BulkDataURI"] = "http://localhost/dicom-web/studies/1.2.840.113619.2.417.3.2831214628.419.1651705382.616/series/1.2.840.113619.2.417.3.2831214628.419.1651705382.622.3/instances/1.2.840.113619.2.417.3.2831214628.419.1651705382.667.1/bulk/00431028";
v["00431028"].removeMember("InlineBinary");
v["7FE00010"]["BulkDataURI"] = "http://localhost/dicom-web/studies/1.2.840.113619.2.417.3.2831214628.419.1651705382.616/series/1.2.840.113619.2.417.3.2831214628.419.1651705382.622.3/instances/1.2.840.113619.2.417.3.2831214628.419.1651705382.667.1/bulk/7fe00010";
v["7FE00010"].removeMember("InlineBinary");
Json::StreamWriterBuilder wbuilder;
wbuilder["indentation"] = ""; // Optional
std::string str = Json::writeString(wbuilder, v);
std::string uuid = Toolbox::GenerateUuid();
std::string md5;
if (storeMd5)
{
Toolbox::ComputeMD5(md5, data, size);
}
switch (compression)
{
case CompressionType_None:
{
MetricsTimer timer(*this, METRICS_CREATE);
area_.Create(uuid, data, size, type);
if (cache_ != NULL)
{
cache_->Add(uuid, type, data, size);
}
return FileInfo(uuid, type, size, md5,str);
}
case CompressionType_ZlibWithSize:
{
ZlibCompressor zlib;
std::string compressed;
zlib.Compress(compressed, data, size);
std::string compressedMD5;
if (storeMd5)
{
Toolbox::ComputeMD5(compressedMD5, compressed);
}
{
MetricsTimer timer(*this, METRICS_CREATE);
if (compressed.size() > 0)
{
area_.Create(uuid, &compressed[0], compressed.size(), type);
}
else
{
area_.Create(uuid, NULL, 0, type);
}
}
if (cache_ != NULL)
{
cache_->Add(uuid, type, data, size); // always add uncompressed data to cache
}
return FileInfo(uuid, type, size, md5,
CompressionType_ZlibWithSize, compressed.size(), compressedMD5, str);
}
default:
throw OrthancException(ErrorCode_NotImplemented);
}
}
struct ORTHANC_PUBLIC FileInfo
{
private:
bool valid_;
std::string uuid_;
FileContentType contentType_;
uint64_t uncompressedSize_;
std::string uncompressedMD5_;
CompressionType compressionType_;
uint64_t compressedSize_;
std::string compressedMD5_;
std::string dir_;
public:
FileInfo();