GetPictureController.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using FastReport.Web.Infrastructure;
  2. using FastReport.Web.Services;
  3. using Microsoft.AspNetCore.Http;
  4. using Microsoft.AspNetCore.Mvc;
  5. namespace FastReport.Web.Controllers
  6. {
  7. static partial class Controllers
  8. {
  9. internal sealed class GetPictureParams
  10. {
  11. public string ReportId { get; set; }
  12. public string PictureId { get; set; }
  13. }
  14. [HttpGet("/preview.getPicture")]
  15. public static IResult GetPicture([FromQuery] GetPictureParams query,
  16. IReportService reportService,
  17. HttpRequest request)
  18. {
  19. if (!IsAuthorized(request))
  20. return Results.Unauthorized();
  21. if (!reportService.TryFindWebReport(query.ReportId, out WebReport webReport))
  22. return Results.NotFound();
  23. var pictureId = query.PictureId.TrimStart('=');
  24. if (webReport.PictureCache.TryGetValue(pictureId, out byte[] value))
  25. {
  26. string imgType = WebUtils.IsPng(value) ? "image/png" : "image/svg+xml";
  27. return Results.File(value, imgType);
  28. }
  29. return Results.NotFound();
  30. }
  31. }
  32. }