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
{
///
/// Instance
///
[Route("instance")]
[ApiController, Authorize, ApiExplorerSettings(GroupName = "Image")]
public class InstanceController : ControllerBase
{
private readonly IDicomArchiveService _dicomArchiveService;
public InstanceController(IDicomArchiveService dicomArchiveService)
{
_dicomArchiveService = dicomArchiveService;
}
/// 指定资源Id,获取Dicom序列所属的实例信息列表
/// Dicom序列的Id
[HttpGet, Route("list/{seriesId:guid}")]
public IEnumerable GetInstanceList(Guid seriesId)
{
return _dicomArchiveService.GetInstanceList(seriesId);
}
/// 指定资源Id,获取Dicom序列所属的实例Id列表
/// Dicom序列的Id
///
///
[HttpGet, Route("list/id/{seriesId:guid}/{tpCode?}/{key?}")]
public IEnumerable GetInstanceIdList(Guid seriesId, string tpCode, bool? key)
{
return _dicomArchiveService.GetInstanceIdList(seriesId, tpCode, key);
}
/// 指定资源Id,渲染Dicom实例的Jpeg预览图像
/// Dicom实例的Id
[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");
}
}
/// 指定资源Id,获取Dicom实例文件的内容
/// Dicom实例的Id
[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");
}
}
}
}