Я хочу создать HttpResponse для потоковой передачи локального файла.
Я хочу использовать MemoryStream, чтобы впоследствии я мог удалить файл (ну, на самом деле, прежде чем вернуть ответ).
Я всегда получаю пустой ответ, хотя поток кажется действительным.
Работа с FileStream в API Controller работает, хотя.
public HttpResponseMessage GetExcelFile(Guid id)
{
// this model is needed to internally create an .xls file that represents this model
var exportModel = this.myService.GetExport(id);
// this approach does not work -> respone always empty although memory stream has content
// var stream = new MemoryStream();
// internally creates a .xls file (using lib) and returns its content as memory stream
// this.myService.ConvertToStream(exportModel, stream));
// this works fine
var stream = File.OpenRead(@"D:\test0815.xls");
var result = this.Request.CreateResponse(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentLength = stream.Length;
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = $"{exportModel.Name}-Sheet.xls"
};
return result;
}
это мой метод, который фактически конвертирует в поток памяти:
private MemoryStream SaveToStream(MemoryStream stream)
{
using (FileStream source = File.Open(
@"D:\test0815.xls",
FileMode.Open))
{
Console.WriteLine("Source length: {0}", source.Length.ToString());
// Copy source to destination.
source.CopyTo(stream);
}
return stream;
}
Я также пытался записать в поток памяти, но это тоже не сработало.
Кажется, что result.Content = new StreamContent(stream);
просто не работает с потоком памяти.
Есть идеи?