我想在api控制器中使用文件流创建响应。 操作完成后,我要删除文件。
FileInfo fileInfo = null;
var streamCopy = new MemoryStream();
try
{
fileInfo = this.myService.CreateExcelExportFile(exportModel, temporaryImageDirectory);
using (var streamIn = fileInfo.OpenRead())
{
await streamIn.CopyToAsync(streamCopy);
}
}
catch (Exception ex)
{
throw new DomainException("");
}
finally
{
fileInfo?.Delete();
}
var result = this.Request.CreateResponse(HttpStatusCode.OK);
result.Content = new StreamContent(streamCopy);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return result;
在这种情况下,我总是以零字节文件结尾。 我怀疑这是因为在实际传递响应之前会先处理memorystream streamCopy。 但是为了删除文件,我必须创建数据的副本,关闭初始StreamReader,然后删除文件。 我知道我不应该在什么地方关闭StreamReader result.Content =新的StreamContent(streamCopy); 取决于控制器中的配置。 我该如何解决这个问题?