我对流感到困惑,返回值和处置。即我使用Stream并想从方法返回流。下面的代码:配置并返回值
public async Task<HttpResponseMessage> GetOverlayAsync(string fileUrl, string language, string strOCR)
{
HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.OK);
using (var stream = new FileStream(@"D:\\_forTest.jpg", FileMode.Open))
{
length = stream.Length;
result.Content = new StreamContent(stream);
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = Path.GetFileName("_forTest.jpg");
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentLength = length;
return result;
}
}
和
public async Task<HttpResponseMessage> GetOverlayAsync(string fileUrl, string language, string strOCR)
{
long length = 0;
HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.OK);
using (var stream = new FileStream(@"D:\\_forTest.jpg", FileMode.Open))
{
length = stream.Length;
result.Content = new StreamContent(stream);
}
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = Path.GetFileName("_forTest.jpg");
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentLength = length;
return result;
}
返回504状态码:
ReadResponse()失败:服务器未返回为此请求完全反应 。服务器返回0字节。
public async Task<HttpResponseMessage> GetOverlayAsync(string fileUrl, string language, string strOCR) { long length = 0; HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.OK); var stream = new FileStream(@"D:\\_forTest.jpg", FileMode.Open); length = stream.Length; result.Content = new StreamContent(stream); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); result.Content.Headers.ContentDisposition.FileName = Path.GetFileName("_forTest.jpg"); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); result.Content.Headers.ContentLength = length; return result; }
有时我得到的文件被阻止:
所以,按照我的理解,流当我们从法
出去如果我不调用Dispose在所有配置另一个过程。如何正确使用?
你的例子是否真的编译?这些方法被标记为“async”,但方法中没有“await”。 – Sean
我在 –
之前删除了不必要的代码尝试打开文件流如下:'new FileStream(@“D:\\ _ forTest.jpg”,FileMode.Open,FileAccess.Read,FileShare.Read);'当然不要配置它(发送给客户后会自动为您处理)。当你只做'新的FileStream(...,FileMode.Open)' - 它相当于'新的FileStream(...,FileMode.Open,FileAccess.ReadWrite,FileShare。读)“,并且这将防止随后打开相同的文件,即使是来自相同的进程。 – Evk