79 lines
3.0 KiB
C#
79 lines
3.0 KiB
C#
using IRaCIS.Core.Application.Contracts.Dicom;
|
||
using IRaCIS.Core.Application.Contracts.Dicom.DTO;
|
||
using IRaCIS.Core.Application.Dicom;
|
||
using Microsoft.AspNetCore.Authorization;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Net.Http;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace IRaCIS.Api.Controllers
|
||
{
|
||
/// <summary>
|
||
/// Instance
|
||
/// </summary>
|
||
[Route("instance")]
|
||
[ApiController, Authorize, ApiExplorerSettings(GroupName = "Image")]
|
||
public class InstanceController : ControllerBase
|
||
{
|
||
private readonly IDicomArchiveService _dicomArchiveService;
|
||
public InstanceController(IDicomArchiveService dicomArchiveService)
|
||
{
|
||
_dicomArchiveService = dicomArchiveService;
|
||
}
|
||
|
||
/// <summary> 指定资源Id,获取Dicom序列所属的实例信息列表 </summary>
|
||
/// <param name="seriesId"> Dicom序列的Id </param>
|
||
[HttpGet, Route("list/{seriesId:guid}")]
|
||
public IEnumerable<DicomInstanceDTO> GetInstanceList(Guid seriesId)
|
||
{
|
||
return _dicomArchiveService.GetInstanceList(seriesId);
|
||
}
|
||
|
||
/// <summary> 指定资源Id,获取Dicom序列所属的实例Id列表 </summary>
|
||
/// <param name="seriesId"> Dicom序列的Id </param>
|
||
/// <param name="tpCode"></param>
|
||
/// <param name="key"></param>
|
||
[HttpGet, Route("list/id/{seriesId:guid}/{tpCode?}/{key?}")]
|
||
public IEnumerable<Guid> GetInstanceIdList(Guid seriesId, string tpCode, bool? key)
|
||
{
|
||
return _dicomArchiveService.GetInstanceIdList(seriesId, tpCode, key);
|
||
}
|
||
|
||
/// <summary> 指定资源Id,渲染Dicom实例的Jpeg预览图像 </summary>
|
||
/// <param name="instanceId"> Dicom实例的Id </param>
|
||
[HttpGet, Route("preview/{instanceId:guid}")]
|
||
[AllowAnonymous]
|
||
public FileContentResult GetInstancePreview(Guid instanceId)
|
||
{
|
||
string path = _dicomArchiveService.GetInstancePreview(instanceId);
|
||
using (var sw = DicomRenderingHelper.RenderPreviewJpeg(path))
|
||
{
|
||
var bytes = new byte[sw.Length];
|
||
sw.Read(bytes, 0, bytes.Length);
|
||
sw.Close();
|
||
return new FileContentResult(bytes, "image/jpeg");
|
||
}
|
||
}
|
||
|
||
/// <summary> 指定资源Id,获取Dicom实例文件的内容 </summary>
|
||
/// <param name="instanceId"> Dicom实例的Id </param>
|
||
[HttpGet, Route("content/{instanceId:guid}")]
|
||
[AllowAnonymous]
|
||
public FileContentResult GetInstanceContent(Guid instanceId)
|
||
{
|
||
var filePath = _dicomArchiveService.GetInstanceContent(instanceId);
|
||
using (var sw = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
|
||
{
|
||
var bytes = new byte[sw.Length];
|
||
sw.Read(bytes, 0, bytes.Length);
|
||
sw.Close();
|
||
return new FileContentResult(bytes, "application/octet-stream");
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|