oss-天然不支持真流式上传,除非大文件在本地盘,否则会占用内存
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
9268aa5bc4
commit
dcfb523b87
|
|
@ -912,7 +912,7 @@ public class OSSService : IOSSService
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 删除某个目录的文件
|
/// 删除某个目录的文件 (包含单个文件,oss单个文件需要去除前缀/)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="prefix"></param>
|
/// <param name="prefix"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
|
|
||||||
|
|
@ -75,8 +75,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
public static int IntValue = 100;
|
public static int IntValue = 100;
|
||||||
|
|
||||||
|
[AllowAnonymous]
|
||||||
public async Task<IResponseOutput> DealIVUSOCTDicomTag(string subjectCode, bool isUploadOss)
|
public async Task<IResponseOutput> DealIVUSOCTDicomTag(string subjectCode, bool? isUploadOss)
|
||||||
{
|
{
|
||||||
var trialId = Guid.Parse("01000000-AC13-0242-3AE4-08DC9B0495C6");
|
var trialId = Guid.Parse("01000000-AC13-0242-3AE4-08DC9B0495C6");
|
||||||
|
|
||||||
|
|
@ -85,39 +85,47 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//var subjectCodeList = new List<string>() { "04032", "12004", "04005" };
|
//var subjectCodeList = new List<string>() { "04032", "12004", "04005" };
|
||||||
|
|
||||||
var list = await _dicomInstanceRepository.Where(t => t.TrialId == trialId && t.DicomStudy.SubjectVisit.IsBaseLine)
|
var list = await _dicomInstanceRepository.Where(t => t.TrialId == trialId && t.DicomStudy.SubjectVisit.IsBaseLine)
|
||||||
.Where(t => t.DicomStudy.Subject.Code== subjectCode)
|
.Where(t => t.DicomStudy.Subject.Code == subjectCode)
|
||||||
.WhereIf(subjectCode == "04032", t => t.DicomStudy.ModalityForEdit == "OCT")
|
.WhereIf(subjectCode == "04032", t => t.DicomStudy.ModalityForEdit == "OCT")
|
||||||
.WhereIf(subjectCode == "12004", t => t.DicomStudy.ModalityForEdit == "IVUS")
|
.WhereIf(subjectCode == "12004", t => t.DicomStudy.ModalityForEdit == "IVUS")
|
||||||
.WhereIf(subjectCode == "04005 ", t => t.DicomStudy.ModalityForEdit == "IVUS" || t.DicomStudy.ModalityForEdit == "OCT")
|
.WhereIf(subjectCode == "04004", t => t.DicomStudy.ModalityForEdit == "IVUS" || t.DicomStudy.ModalityForEdit == "OCT")
|
||||||
|
.WhereIf(subjectCode == "04005", t => t.DicomStudy.ModalityForEdit == "IVUS" || t.DicomStudy.ModalityForEdit == "OCT")
|
||||||
.Select(t => new
|
.Select(t => new
|
||||||
{
|
{
|
||||||
SubjectCode = t.DicomStudy.Subject.Code,
|
SubjectCode = t.DicomStudy.Subject.Code,
|
||||||
t.DicomStudy.ModalityForEdit,
|
t.DicomStudy.ModalityForEdit,
|
||||||
t.Path
|
t.Path,
|
||||||
|
t.FileSize
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
{
|
{
|
||||||
|
Console.WriteLine(item.Path);
|
||||||
|
|
||||||
var stream = await _IOSSService.GetStreamFromOSSAsync(item.Path);
|
await using var stream = await _IOSSService.GetStreamFromOSSAsync(item.Path);
|
||||||
|
|
||||||
var dicomFile = DicomFile.Open(stream);
|
var dicomFile = DicomFile.Open(stream, FileReadOption.ReadLargeOnDemand);
|
||||||
|
|
||||||
switch (item.SubjectCode)
|
switch (item.SubjectCode)
|
||||||
{
|
{
|
||||||
case "04032":
|
case "04032":
|
||||||
|
|
||||||
dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}_04032");
|
dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}-04032");
|
||||||
dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, "04032");
|
dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, "04032");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "12004":
|
case "12004":
|
||||||
dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}_12004");
|
dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}-12004");
|
||||||
dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, "12004");
|
dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, "12004");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "04004":
|
||||||
|
dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}-04004");
|
||||||
|
dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, "04004");
|
||||||
|
break;
|
||||||
|
|
||||||
case "04005":
|
case "04005":
|
||||||
dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}_04005");
|
dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}-04005");
|
||||||
dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, "04005");
|
dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, "04005");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -131,28 +139,53 @@ namespace IRaCIS.Core.Application.Service
|
||||||
var fileName = Path.GetFileName(item.Path);
|
var fileName = Path.GetFileName(item.Path);
|
||||||
|
|
||||||
|
|
||||||
// 4 保存到一个 MemoryStream
|
|
||||||
|
|
||||||
|
//if (isUploadOss == false)
|
||||||
|
//{
|
||||||
|
// // 本地完整路径
|
||||||
|
// var localPath = Path.Combine(Directory.GetCurrentDirectory(), fileName);
|
||||||
|
|
||||||
|
// // 写入文件
|
||||||
|
// await using var fileStream = File.Create(localPath);
|
||||||
|
// await output.CopyToAsync(fileStream);
|
||||||
|
|
||||||
|
// // 可选:确保写入完成再关闭
|
||||||
|
// await fileStream.FlushAsync();
|
||||||
|
//}
|
||||||
|
//else
|
||||||
|
if (isUploadOss == true)
|
||||||
|
{
|
||||||
|
//4 保存到一个 MemoryStream
|
||||||
await using var output = new MemoryStream();
|
await using var output = new MemoryStream();
|
||||||
dicomFile.Save(output);
|
dicomFile.Save(output);
|
||||||
output.Position = 0;
|
output.Position = 0;
|
||||||
|
|
||||||
|
|
||||||
if (isUploadOss == false)
|
|
||||||
{
|
|
||||||
// 本地完整路径
|
|
||||||
var localPath = Path.Combine(Directory.GetCurrentDirectory(), fileName);
|
|
||||||
|
|
||||||
// 写入文件
|
|
||||||
await using var fileStream = File.Create(localPath);
|
|
||||||
await output.CopyToAsync(fileStream);
|
|
||||||
|
|
||||||
// 可选:确保写入完成再关闭
|
|
||||||
await fileStream.FlushAsync();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
await _IOSSService.UploadToOSSAsync(output, folder, fileName, false);
|
await _IOSSService.UploadToOSSAsync(output, folder, fileName, false);
|
||||||
|
|
||||||
|
//var pipe = new System.IO.Pipelines.Pipe();
|
||||||
|
|
||||||
|
//// 写入端:fo-dicom
|
||||||
|
//_ = Task.Run(async () =>
|
||||||
|
//{
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// await using var writer = pipe.Writer.AsStream();
|
||||||
|
// dicomFile.Save(writer); // 直接写 Pipe
|
||||||
|
// await pipe.Writer.CompleteAsync();
|
||||||
|
// }
|
||||||
|
// catch (Exception ex)
|
||||||
|
// {
|
||||||
|
// await pipe.Writer.CompleteAsync(ex);
|
||||||
|
// }
|
||||||
|
//});
|
||||||
|
|
||||||
|
////await _IOSSService.UploadToOSSAsync(pipe.Reader.AsStream(), folder, fileName, false);
|
||||||
|
|
||||||
|
await _IOSSService.DeleteFromPrefix(item.Path.TrimStart("/"), true);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue