CostCalculationItem/IRaCIS.Core.API/Controllers/Image/InstanceController.cs

79 lines
3.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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");
}
}
}
}