From 88c1bf7e76226d7a3dda2b6978743edb667a6450 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 16 Mar 2026 14:41:19 +0800 Subject: [PATCH] =?UTF-8?q?oss=20=E5=BC=82=E6=AD=A5=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=B5=81=EF=BC=8C=E6=A3=80=E6=9F=A5=E6=97=B6=E9=97=B4=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 9 ++- IRaCIS.Core.Application/Helper/OSSService.cs | 69 +++++++++++++------ 2 files changed, 54 insertions(+), 24 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 37cdc4814..30201c674 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -1046,7 +1046,7 @@ namespace IRaCIS.Core.API.Controllers { abortToken.ThrowIfCancellationRequested(); - var studyTime = study.StudyTime?.ToString("yyyy-MM-dd HH:mm:ss") ?? "UnknownTime"; + var studyTime = study.StudyTime?.ToString("yyyyMMdd_HHmmss") ?? "UnknownTime"; var modalitysStr = string.Join('_', study.SeriesList.Select(t => t.Modality).Distinct()); // ---------- DICOMDIR ---------- @@ -1172,8 +1172,11 @@ namespace IRaCIS.Core.API.Controllers } else { - await using var source = await _oSSService.GetStreamFromOSSAsync(instance.Path); - await source.CopyToAsync(entryStream, 32 * 1024, abortToken); + await using (var source = await _oSSService.GetStreamFromOSSAsync(instance.Path)) + { + await source.CopyToAsync(entryStream, 32 * 1024, abortToken); + } + } diff --git a/IRaCIS.Core.Application/Helper/OSSService.cs b/IRaCIS.Core.Application/Helper/OSSService.cs index 558b3347d..e935db222 100644 --- a/IRaCIS.Core.Application/Helper/OSSService.cs +++ b/IRaCIS.Core.Application/Helper/OSSService.cs @@ -544,31 +544,58 @@ public class OSSService : IOSSService var pipe = new System.IO.Pipelines.Pipe(); - _ = Task.Run(async () => - { - try + var args = new GetObjectArgs() + .WithBucket(minIOConfig.BucketName) + .WithObject(ossRelativePath) + .WithCallbackStream(async stream => // ✅ 使用异步回调 { - var args = new GetObjectArgs() - .WithBucket(minIOConfig.BucketName) - .WithObject(ossRelativePath) - .WithCallbackStream( stream => - { - stream.CopyTo(pipe.Writer.AsStream()); - }); - - await minioClient.GetObjectAsync(args); - await pipe.Writer.CompleteAsync(); - } - catch (Exception ex) - { - Log.Error($"minio 获取流错误:{ex.Message}"); - await pipe.Writer.CompleteAsync(ex); - } - }); - + try + { + var pipeStream = pipe.Writer.AsStream(); + await stream.CopyToAsync(pipeStream); // ✅ 使用异步CopyTo + await pipe.Writer.CompleteAsync(); + } + catch (Exception ex) + { + Log.Error($"minio 获取流错误:{ex.Message}"); + await pipe.Writer.CompleteAsync(ex); + } + }); + await minioClient.GetObjectAsync(args); return pipe.Reader.AsStream(); + #region 废弃2 + + //var pipe = new System.IO.Pipelines.Pipe(); + + //_ = Task.Run(async () => + //{ + // try + // { + // var args = new GetObjectArgs() + // .WithBucket(minIOConfig.BucketName) + // .WithObject(ossRelativePath) + // .WithCallbackStream(stream => + // { + // stream.CopyTo(pipe.Writer.AsStream()); + // }); + + // await minioClient.GetObjectAsync(args); + // await pipe.Writer.CompleteAsync(); + // } + // catch (Exception ex) + // { + // Log.Error($"minio 获取流错误:{ex.Message}"); + // await pipe.Writer.CompleteAsync(ex); + // } + //}); + + + //return pipe.Reader.AsStream(); + #endregion + + #region 废弃 //var memoryStream = new MemoryStream();