在web api中返回JPEG,无法删除文件,因为其他进程正在使用该文件



我正试图从文件系统中检索一个图像,并通过HttpResponseMessage传递其内容,然后删除该图像。我可以获得成功传递图像的响应,但由于错误而无法删除:

进程无法访问文件"C:…"。。。\Temp\c8530ae-ae92-49f3-8f62-cd1f5467fe8a1.jpeg',因为它正被另一个进程使用。

我的控制器代码:

 {
   Image returnImg = Image.FromFile(@"C:...Temp" + id + "1" + ".jpeg");
   MemoryStream memoryStream = new MemoryStream();
   returnImg.Save(memoryStream, ImageFormat.Jpeg);
   var message = new HttpResponseMessage(HttpStatusCode.OK)
   {
      Content = new ByteArrayContent(memoryStream.ToArray())
   };
   message.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
   File.Delete(@"C:...Temp" + id + "1" + ".jpeg"); //error is on this line execution
   return message
 }

我想这与内存流有关,是不是我缺少了一个关闭操作?

Image对象returnImg实现IDisposable接口。您必须将其放置在using{}块中。此外,MemoryStream未正确关闭。

当一个类实现IDisposable类,并且您正在创建该类的实例时,您应该将其包装在using块中,这样该类就可以正确地销毁对象。尝试:

  {
       using(Image returnImg = Image.FromFile(@"C:...Temp" + id + "1" + ".jpeg"))
       {
       using(MemoryStream memoryStream = new MemoryStream())
       {
       returnImg.Save(memoryStream, ImageFormat.Jpeg);
       var message = new HttpResponseMessage(HttpStatusCode.OK)
       {
          Content = new ByteArrayContent(memoryStream.ToArray())
       };
}
       message.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
}
       File.Delete(@"C:...Temp" + id + "1" + ".jpeg"); //error is on this line execution
       return message
     }

相关内容

最新更新