ResumeFileStreamResult.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using Microsoft.AspNetCore.Mvc;
  2. using Microsoft.AspNetCore.Mvc.Infrastructure;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using Microsoft.Net.Http.Headers;
  5. using System;
  6. using System.IO;
  7. using System.Threading.Tasks;
  8. namespace Masuit.Tools.AspNetCore.ResumeFileResults.ResumeFileResult
  9. {
  10. /// <summary>
  11. /// 基于Stream的ResumeFileStreamResult
  12. /// </summary>
  13. public class ResumeFileStreamResult : FileStreamResult, IResumeFileResult
  14. {
  15. /// <summary>
  16. /// 构造函数
  17. /// </summary>
  18. /// <param name="fileStream">文件流</param>
  19. /// <param name="contentType">Content-Type</param>
  20. /// <param name="etag">ETag</param>
  21. public ResumeFileStreamResult(FileStream fileStream, string contentType, string etag = null) : this(fileStream, MediaTypeHeaderValue.Parse(contentType), !string.IsNullOrEmpty(etag) ? EntityTagHeaderValue.Parse(etag) : null)
  22. {
  23. }
  24. /// <summary>
  25. /// 构造函数
  26. /// </summary>
  27. /// <param name="fileStream">文件流</param>
  28. /// <param name="contentType">Content-Type</param>
  29. /// <param name="etag">ETag</param>
  30. public ResumeFileStreamResult(FileStream fileStream, MediaTypeHeaderValue contentType, EntityTagHeaderValue etag = null) : base(fileStream, contentType)
  31. {
  32. EntityTag = etag;
  33. EnableRangeProcessing = true;
  34. }
  35. /// <inheritdoc/>
  36. public string FileInlineName { get; set; }
  37. /// <inheritdoc/>
  38. public override Task ExecuteResultAsync(ActionContext context)
  39. {
  40. if (context == null)
  41. {
  42. throw new ArgumentNullException(nameof(context));
  43. }
  44. context.HttpContext.Response.Headers[HeaderNames.AccessControlExposeHeaders] = HeaderNames.ContentDisposition;
  45. var executor = context.HttpContext.RequestServices.GetRequiredService<IActionResultExecutor<ResumeFileStreamResult>>();
  46. return executor.ExecuteAsync(context, this);
  47. }
  48. }
  49. }