上传调整测试

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.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.SignalR;
using Microsoft.AspNetCore.StaticFiles;
using Microsoft.AspNetCore.WebUtilities;
@ -36,6 +37,7 @@ using SharpCompress.Archives;
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
@ -131,11 +133,13 @@ namespace IRaCIS.Core.API.Controllers
/// <summary> 流式上传 Dicom上传 </summary>
[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 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);
@ -171,7 +175,7 @@ namespace IRaCIS.Core.API.Controllers
//普通单个文件
else
{
if (mediaType.Contains("octet-stream")||mediaType.Contains("dicom"))
if (mediaType.Contains("octet-stream") || mediaType.Contains("dicom"))
{
++fileCount;
@ -183,7 +187,7 @@ namespace IRaCIS.Core.API.Controllers
section = await reader.ReadNextSectionAsync();
}
return fileCount;
//return fileCount;
}
@ -220,22 +224,36 @@ namespace IRaCIS.Core.API.Controllers
/// <summary>Dicom 归档</summary>
[HttpPost, Route("Study/ArchiveStudy/{trialId:guid}")]
[HttpPost, Route("Study/ArchiveStudy")]
[DisableFormValueModelBinding]
[DisableRequestSizeLimit]
[TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> ArchiveStudyNew([FromForm] ArchiveStudyCommand archiveStudyCommand,
//[TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> ArchiveStudyNew(/*[FromForm] ArchiveStudyCommand archiveStudyCommand,*/ Guid trialId, Guid subjectVisitId, string studyInstanceUid, Guid? abandonStudyId,
[FromServices] ILogger<UploadDownLoadController> _logger,
[FromServices] IEasyCachingProvider _provider,
[FromServices] IStudyService _studyService,
[FromServices] IHubContext<UploadHub, IUploadClient> _uploadHub,
[FromServices] IHubContext<UploadHub, IUploadClient> _uploadHub,
[FromServices] IDicomArchiveService _dicomArchiveService,
[FromServices] IRepository _repository
)
{
_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;
var startTime = DateTime.Now;
@ -262,7 +280,7 @@ namespace IRaCIS.Core.API.Controllers
var savedInfo = _studyService.GetSaveToDicomInfo(archiveStudyCommand.SubjectVisitId);
archiveResult.ReceivedFileCount = await DicomFileUploadAsync(async (fileName, fileStream, receivedCount) =>
await DicomFileUploadAsync(async (fileName, fileStream, receivedCount) =>
{
try
@ -286,7 +304,7 @@ namespace IRaCIS.Core.API.Controllers
await _uploadHub.Clients.User(_userInfo.Id.ToString()).ReceivProgressAsync(archiveStudyCommand.StudyInstanceUid, receivedCount);
archiveResult.ReceivedFileCount = receivedCount;
}
catch (Exception e)
@ -300,7 +318,7 @@ namespace IRaCIS.Core.API.Controllers
}
});
}, mediaTypeHeader.Boundary.Value);
var studyMonitor = new StudyMonitor()
{
@ -344,7 +362,7 @@ namespace IRaCIS.Core.API.Controllers
else
{
studyMonitor.IsSuccess = false;
studyMonitor.Note= JsonConvert.SerializeObject(archiveResult);
studyMonitor.Note = JsonConvert.SerializeObject(archiveResult);
_provider.Remove("StudyUid_" + archiveStudyCommand.StudyInstanceUid);
}
@ -356,7 +374,7 @@ namespace IRaCIS.Core.API.Controllers
{
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);
@ -365,7 +383,7 @@ namespace IRaCIS.Core.API.Controllers
{
_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.UploadFinishedTime = DateTime.Now;
await _repository.AddAsync(studyMonitor, true);

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}})">
<summary> 流式上传 通用封装 不返回任何数据,后续还有事情处理 </summary>
</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>
</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>
</member>
<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;
//factories.RemoveType<FormValueProviderFactory>();
factories.RemoveType<FormFileValueProviderFactory>();
//factories.RemoveType<JQueryFormValueProviderFactory>();
factories.RemoveType<JQueryFormValueProviderFactory>();
context.HttpContext.Request.EnableBuffering();
}