Мне было интересно, есть ли простой способ загрузить файл более ... "общим" способом. Я это придумал.
Это простой ActionResult
способ загрузить файл из вызова контроллера, который возвращает файл IHttpActionResult
. Файл хранится в формате byte[] Content
. При необходимости вы можете превратить его в поток.
Я использовал это для возврата файлов, хранящихся в столбце varbinary базы данных.
public class FileHttpActionResult : IHttpActionResult
{
public HttpRequestMessage Request { get; set; }
public string FileName { get; set; }
public string MediaType { get; set; }
public HttpStatusCode StatusCode { get; set; }
public byte[] Content { get; set; }
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response = new HttpResponseMessage(StatusCode);
response.StatusCode = StatusCode;
response.Content = new StreamContent(new MemoryStream(Content));
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = FileName;
response.Content.Headers.ContentType = new MediaTypeHeaderValue(MediaType);
return Task.FromResult(response);
}
}