ResumeFileStreamResult.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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(Stream 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(Stream 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. var executor = context.HttpContext.RequestServices.GetRequiredService<IActionResultExecutor<ResumeFileStreamResult>>();
  45. return executor.ExecuteAsync(context, this);
  46. }
  47. }
  48. }