私の ASP.NET MVC4 プロジェクトでは、サーバー上のフォルダーに保存される画像をアップロードする方法が必要です。以下のコントローラーコードを思いつきました: 基本的に動作しますが、初めてです! このメソッドを (新しいイメージを設定するために同じ TeacherId を使用して) 再度呼び出すと、ファイルが別のプロセスによって使用されていることを示す System.IO.IOException (HResult -2147024864) が返されます。ロックを回避するにはどうすればよいですか?そして、そもそもなぜそれが実際に機能するのでしょうか? すべての画像とストリームを整理しましたが、何か重要なものが欠けているようです。助けてくれてありがとう!
[HttpPost]
public ActionResult Upload(HttpPostedFileBase pic, int TeacherId)
{
if (pic.ContentLength > 0) {
var fileName = "Teacher" + TeacherId.ToString() + "tmp.jpg";
var path = Path.Combine(Server.MapPath("~/TempImages"), fileName);
Image i = Image.FromStream(pic.InputStream, true, true);
if (i.Size.Width > 700 || i.Height > 700)
{
Image resizedImage;
resizedImage = ResizeImage(i, new Size { Width = 700, Height = 700 }, true);
i.Dispose();
resizedImage.Save(path,ImageFormat.Jpeg);
resizedImage.Dispose();
}
else
{
i.Dispose();
}
pic.InputStream.Close();
pic.InputStream.Dispose();
TempData["TeacherId"] = TeacherId.ToString();
return RedirectToAction("EditImage", new { TeacherId = TeacherId });
}
return RedirectToAction("UploadImage", new { TeacherId = TeacherId });
}