上传调整测试

Uat_Study
hang 2022-08-08 13:38:47 +08:00
parent 85bf1a6758
commit 97c05b4371
3 changed files with 43 additions and 25 deletions

View File

@ -24,6 +24,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.SignalR; using Microsoft.AspNetCore.SignalR;
using Microsoft.AspNetCore.StaticFiles; using Microsoft.AspNetCore.StaticFiles;
using Microsoft.AspNetCore.WebUtilities; using Microsoft.AspNetCore.WebUtilities;
@ -36,6 +37,7 @@ using SharpCompress.Archives;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -131,11 +133,13 @@ namespace IRaCIS.Core.API.Controllers
/// <summary> 流式上传 Dicom上传 </summary> /// <summary> 流式上传 Dicom上传 </summary>
[Route("base")] [Route("base")]
public virtual async Task<int> DicomFileUploadAsync(Func<string, Stream, int, Task> filePathFunc) public virtual async Task DicomFileUploadAsync(Func<string, Stream, int, Task> filePathFunc,string boundary)
{ {
var fileCount = 0; var fileCount = 0;
var boundary = HeaderUtilities.RemoveQuotes(MediaTypeHeaderValue.Parse(Request.ContentType).Boundary).Value;
//var boundary = HeaderUtilities.RemoveQuotes(MediaTypeHeaderValue.Parse(Request.ContentType).Boundary).Value;
//var boundary = mediaTypeHeader.Boundary.Value;
var reader = new MultipartReader(boundary, HttpContext.Request.Body); var reader = new MultipartReader(boundary, HttpContext.Request.Body);
@ -171,7 +175,7 @@ namespace IRaCIS.Core.API.Controllers
//普通单个文件 //普通单个文件
else else
{ {
if (mediaType.Contains("octet-stream")||mediaType.Contains("dicom")) if (mediaType.Contains("octet-stream") || mediaType.Contains("dicom"))
{ {
++fileCount; ++fileCount;
@ -183,7 +187,7 @@ namespace IRaCIS.Core.API.Controllers
section = await reader.ReadNextSectionAsync(); section = await reader.ReadNextSectionAsync();
} }
return fileCount; //return fileCount;
} }
@ -220,22 +224,36 @@ namespace IRaCIS.Core.API.Controllers
/// <summary>Dicom 归档</summary> /// <summary>Dicom 归档</summary>
[HttpPost, Route("Study/ArchiveStudy/{trialId:guid}")] [HttpPost, Route("Study/ArchiveStudy")]
[DisableFormValueModelBinding] [DisableFormValueModelBinding]
[DisableRequestSizeLimit] [DisableRequestSizeLimit]
[TypeFilter(typeof(TrialResourceFilter))] //[TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> ArchiveStudyNew([FromForm] ArchiveStudyCommand archiveStudyCommand, public async Task<IResponseOutput> ArchiveStudyNew(/*[FromForm] ArchiveStudyCommand archiveStudyCommand,*/ Guid trialId, Guid subjectVisitId, string studyInstanceUid, Guid? abandonStudyId,
[FromServices] ILogger<UploadDownLoadController> _logger, [FromServices] ILogger<UploadDownLoadController> _logger,
[FromServices] IEasyCachingProvider _provider, [FromServices] IEasyCachingProvider _provider,
[FromServices] IStudyService _studyService, [FromServices] IStudyService _studyService,
[FromServices] IHubContext<UploadHub, IUploadClient> _uploadHub, [FromServices] IHubContext<UploadHub, IUploadClient> _uploadHub,
[FromServices] IDicomArchiveService _dicomArchiveService, [FromServices] IDicomArchiveService _dicomArchiveService,
[FromServices] IRepository _repository [FromServices] IRepository _repository
) )
{ {
_logger.LogError("请求到达接口"); _logger.LogError("请求到达接口");
// validation of Content-Type
// 1. first, it must be a form-data request
// 2. a boundary should be found in the Content-Type
if (!HttpContext.Request.HasFormContentType ||
!MediaTypeHeaderValue.TryParse(HttpContext.Request.ContentType, out var mediaTypeHeader) ||
string.IsNullOrEmpty(mediaTypeHeader.Boundary.Value))
{
return ResponseOutput.NotOk("不支持的MediaType");
}
var archiveStudyCommand = new ArchiveStudyCommand() { AbandonStudyId = abandonStudyId, StudyInstanceUid = studyInstanceUid, SubjectVisitId = subjectVisitId };
string studycode = string.Empty; string studycode = string.Empty;
var startTime = DateTime.Now; var startTime = DateTime.Now;
@ -262,7 +280,7 @@ namespace IRaCIS.Core.API.Controllers
var savedInfo = _studyService.GetSaveToDicomInfo(archiveStudyCommand.SubjectVisitId); var savedInfo = _studyService.GetSaveToDicomInfo(archiveStudyCommand.SubjectVisitId);
archiveResult.ReceivedFileCount = await DicomFileUploadAsync(async (fileName, fileStream, receivedCount) => await DicomFileUploadAsync(async (fileName, fileStream, receivedCount) =>
{ {
try try
@ -286,7 +304,7 @@ namespace IRaCIS.Core.API.Controllers
await _uploadHub.Clients.User(_userInfo.Id.ToString()).ReceivProgressAsync(archiveStudyCommand.StudyInstanceUid, receivedCount); await _uploadHub.Clients.User(_userInfo.Id.ToString()).ReceivProgressAsync(archiveStudyCommand.StudyInstanceUid, receivedCount);
archiveResult.ReceivedFileCount = receivedCount;
} }
catch (Exception e) catch (Exception e)
@ -300,7 +318,7 @@ namespace IRaCIS.Core.API.Controllers
} }
}); }, mediaTypeHeader.Boundary.Value);
var studyMonitor = new StudyMonitor() var studyMonitor = new StudyMonitor()
{ {
@ -308,9 +326,9 @@ namespace IRaCIS.Core.API.Controllers
SiteId = savedInfo.SiteId, SiteId = savedInfo.SiteId,
SubjectId = savedInfo.SubjectId, SubjectId = savedInfo.SubjectId,
SubjectVisitId = savedInfo.SubjectVisitId, SubjectVisitId = savedInfo.SubjectVisitId,
UploadStartTime = startTime, UploadStartTime = startTime,
FileSize = (decimal)HttpContext.Request.ContentLength, FileSize = (decimal)HttpContext.Request.ContentLength,
FileCount = archiveResult.ReceivedFileCount, FileCount = archiveResult.ReceivedFileCount,
@ -321,7 +339,7 @@ namespace IRaCIS.Core.API.Controllers
try try
{ {
if (archivedStudyIds.Count > 0) // 上传成功,处理逻辑 if (archivedStudyIds.Count > 0) // 上传成功,处理逻辑
{ {
@ -334,19 +352,19 @@ namespace IRaCIS.Core.API.Controllers
studyMonitor.IsSuccess = true; studyMonitor.IsSuccess = true;
//_studyService.UploadOrReUploadNeedTodo(archiveStudyCommand, archivedStudyIds, ref archiveResult, ); //_studyService.UploadOrReUploadNeedTodo(archiveStudyCommand, archivedStudyIds, ref archiveResult, );
} }
else else
{ {
studyMonitor.IsSuccess = false; studyMonitor.IsSuccess = false;
studyMonitor.Note= JsonConvert.SerializeObject(archiveResult); studyMonitor.Note = JsonConvert.SerializeObject(archiveResult);
_provider.Remove("StudyUid_" + archiveStudyCommand.StudyInstanceUid); _provider.Remove("StudyUid_" + archiveStudyCommand.StudyInstanceUid);
} }
@ -356,16 +374,16 @@ namespace IRaCIS.Core.API.Controllers
{ {
studyMonitor.IsSuccess = false; studyMonitor.IsSuccess = false;
studyMonitor.Note = JsonConvert.SerializeObject(new { Message=e.Message,Result= archiveResult }); studyMonitor.Note = JsonConvert.SerializeObject(new { Message = e.Message, Result = archiveResult });
_logger.LogError(e.Message + e.StackTrace); _logger.LogError(e.Message + e.StackTrace);
} }
finally finally
{ {
_provider.Remove("StudyUid_" + archiveStudyCommand.StudyInstanceUid); _provider.Remove("StudyUid_" + archiveStudyCommand.StudyInstanceUid);
studyMonitor.StudyId = archiveResult.ArchivedDicomStudies.FirstOrDefault()?.Id??Guid.Empty; studyMonitor.StudyId = archiveResult.ArchivedDicomStudies.FirstOrDefault()?.Id ?? Guid.Empty;
studyMonitor.StudyCode = archiveResult.ArchivedDicomStudies.FirstOrDefault()?.StudyCode; studyMonitor.StudyCode = archiveResult.ArchivedDicomStudies.FirstOrDefault()?.StudyCode;
studyMonitor.UploadFinishedTime = DateTime.Now; studyMonitor.UploadFinishedTime = DateTime.Now;
await _repository.AddAsync(studyMonitor, true); await _repository.AddAsync(studyMonitor, true);
@ -373,7 +391,7 @@ namespace IRaCIS.Core.API.Controllers
} }
return ResponseOutput.Result(studyMonitor.IsSuccess, archiveResult); return ResponseOutput.Result(studyMonitor.IsSuccess, archiveResult);

View File

@ -220,10 +220,10 @@
<member name="M:IRaCIS.Core.API.Controllers.UploadBaseController.FileUploadAsync(System.Func{System.String,System.Threading.Tasks.Task{System.String}})"> <member name="M:IRaCIS.Core.API.Controllers.UploadBaseController.FileUploadAsync(System.Func{System.String,System.Threading.Tasks.Task{System.String}})">
<summary> 流式上传 通用封装 不返回任何数据,后续还有事情处理 </summary> <summary> 流式上传 通用封装 不返回任何数据,后续还有事情处理 </summary>
</member> </member>
<member name="M:IRaCIS.Core.API.Controllers.UploadBaseController.DicomFileUploadAsync(System.Func{System.String,System.IO.Stream,System.Int32,System.Threading.Tasks.Task})"> <member name="M:IRaCIS.Core.API.Controllers.UploadBaseController.DicomFileUploadAsync(System.Func{System.String,System.IO.Stream,System.Int32,System.Threading.Tasks.Task},System.String)">
<summary> 流式上传 Dicom上传 </summary> <summary> 流式上传 Dicom上传 </summary>
</member> </member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.ArchiveStudyNew(IRaCIS.Core.Application.Contracts.ArchiveStudyCommand,Microsoft.Extensions.Logging.ILogger{IRaCIS.Core.API.Controllers.UploadDownLoadController},EasyCaching.Core.IEasyCachingProvider,IRaCIS.Core.Application.Contracts.IStudyService,Microsoft.AspNetCore.SignalR.IHubContext{IRaCIS.Core.API.UploadHub,IRaCIS.Core.API.IUploadClient},IRaCIS.Core.Application.Contracts.Dicom.IDicomArchiveService,IRaCIS.Core.Infra.EFCore.IRepository)"> <member name="M:IRaCIS.Core.API.Controllers.StudyController.ArchiveStudyNew(System.Guid,System.Guid,System.String,System.Nullable{System.Guid},Microsoft.Extensions.Logging.ILogger{IRaCIS.Core.API.Controllers.UploadDownLoadController},EasyCaching.Core.IEasyCachingProvider,IRaCIS.Core.Application.Contracts.IStudyService,Microsoft.AspNetCore.SignalR.IHubContext{IRaCIS.Core.API.UploadHub,IRaCIS.Core.API.IUploadClient},IRaCIS.Core.Application.Contracts.Dicom.IDicomArchiveService,IRaCIS.Core.Infra.EFCore.IRepository)">
<summary>Dicom 归档</summary> <summary>Dicom 归档</summary>
</member> </member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadVisitClinicalData(System.Guid)"> <member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadVisitClinicalData(System.Guid)">

View File

@ -16,7 +16,7 @@ namespace IRaCIS.Core.Application.Filter
var factories = context.ValueProviderFactories; var factories = context.ValueProviderFactories;
//factories.RemoveType<FormValueProviderFactory>(); //factories.RemoveType<FormValueProviderFactory>();
factories.RemoveType<FormFileValueProviderFactory>(); factories.RemoveType<FormFileValueProviderFactory>();
//factories.RemoveType<JQueryFormValueProviderFactory>(); factories.RemoveType<JQueryFormValueProviderFactory>();
context.HttpContext.Request.EnableBuffering(); context.HttpContext.Request.EnableBuffering();
} }