using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.Extensions.DependencyInjection; using Microsoft.Net.Http.Headers; namespace Masuit.Tools.AspNetCore.ResumeFileResults.ResumeFileResult; /// /// 基于Stream的ResumeFileStreamResult /// public class ResumeFileStreamResult : FileStreamResult, IResumeFileResult { /// /// 构造函数 /// /// 文件流 /// Content-Type /// ETag public ResumeFileStreamResult(Stream stream, string contentType, string etag = null) : this(stream, MediaTypeHeaderValue.Parse(contentType), !string.IsNullOrEmpty(etag) ? EntityTagHeaderValue.Parse(etag) : null) { } /// /// 构造函数 /// /// 文件流 /// Content-Type /// ETag public ResumeFileStreamResult(Stream stream, MediaTypeHeaderValue contentType, EntityTagHeaderValue etag = null) : base(stream, contentType) { if (stream.CanSeek) { stream.Seek(0, SeekOrigin.Begin); } EntityTag = etag; EnableRangeProcessing = true; } /// public string FileInlineName { get; set; } /// public override Task ExecuteResultAsync(ActionContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var executor = context.HttpContext.RequestServices.GetRequiredService>(); return executor.ExecuteAsync(context, this); } }