1

私の 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 });
    }
4

0 に答える 0