1. ホーム
  2. image

[解決済み] MVC 4での画像のアップロード/表示

2023-04-25 03:46:17

質問

Entity Frameworkを使用してデータベースから画像をアップロード/表示する方法について、ステップバイステップのチュートリアルを知っている人はいますか?私はコードスニペットをチェックアウトしましたが、私はまだそれがどのように動作するかについて明確ではありません。私はアップロードフォームを書くことを除けば、私は失われたので、コードはありません。任意の(そして私は任意の意味での)助けは非常に感謝されます。

余談ですが、なぜこのトピックをカバーする書籍がないのでしょうか?私は Pro ASP.NET MVC 4 と Professional MVC4 の両方を持っていますが、それらにはこのトピックについて何の言及もありません。

どのように解決するのですか?

下記をご覧ください。

@using (Html.BeginForm("FileUpload", "Home", FormMethod.Post, 
                            new { enctype = "multipart/form-data" }))
{  
    <label for="file">Upload Image:</label> 
    <input type="file" name="file" id="file" style="width: 100%;" /> 
    <input type="submit" value="Upload" class="submit" /> 
}

コントローラにはアクションメソッドが必要です。 HttpPostedFileBase ;

 public ActionResult FileUpload(HttpPostedFileBase file)
    {
        if (file != null)
        {
            string pic = System.IO.Path.GetFileName(file.FileName);
            string path = System.IO.Path.Combine(
                                   Server.MapPath("~/images/profile"), pic); 
            // file is uploaded
            file.SaveAs(path);

            // save the image path path to the database or you can send image 
            // directly to database
            // in-case if you want to store byte[] ie. for DB
            using (MemoryStream ms = new MemoryStream()) 
            {
                 file.InputStream.CopyTo(ms);
                 byte[] array = ms.GetBuffer();
            }

        }
        // after successfully uploading redirect the user
        return RedirectToAction("actionname", "controller name");
    }

アップデート1

jQuery を使って非同期でファイルをアップロードしたい場合は、次のようにしてください。 この記事 .

サーバー側を処理するコード(複数アップロードの場合)です。

 try
    {
        HttpFileCollection hfc = HttpContext.Current.Request.Files;
        string path = "/content/files/contact/";

        for (int i = 0; i < hfc.Count; i++)
        {
            HttpPostedFile hpf = hfc[i];
            if (hpf.ContentLength > 0)
            {
                string fileName = "";
                if (Request.Browser.Browser == "IE")
                {
                    fileName = Path.GetFileName(hpf.FileName);
                }
                else
                {
                    fileName = hpf.FileName;
                }
                string fullPathWithFileName = path + fileName;
                hpf.SaveAs(Server.MapPath(fullPathWithFileName));
            }
        }

    }
    catch (Exception ex)
    {
        throw ex;
    }

このコントロールは画像名も返すので(javascriptのコールバックで)、それを使ってDOMに画像を表示することができます。

アップデイト2

別の方法として MVC 4での非同期ファイルアップロード .