2012-05-01 40 views
39

は私がアップロードフォームを持っていると私はそのような画像や他のいくつかのフィールドとしての私の情報を渡したいが、私は画像をアップロードすることができますかわからない私コントローラコード:アップロード画像は

[HttpPost] 
     public ActionResult Create(tblPortfolio tblportfolio) 
     { 
      if (ModelState.IsValid) 
      { 
       db.tblPortfolios.AddObject(tblportfolio); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(tblportfolio); 
     } 

そして、これが私の見解コードです:

@model MyApp.Models.tblPortfolio 

<h2>Create</h2> 

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>tblPortfolio</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Title) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Title) 
      @Html.ValidationMessageFor(model => model.Title) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.ImageFile) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.ImageFile, new { type = "file" }) 
      @Html.ValidationMessageFor(model => model.ImageFile) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Link) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Link) 
      @Html.ValidationMessageFor(model => model.Link) 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

今、私はどのように私は画像をアップロードして、サーバー上に保存することができますかわからない..私はGuid.NewGuid();によるイメージ名を設定する方法?または、イメージパスを設定するにはどうすればよいですか?

+2

を使用することができます'model.ImageFile'の? – Shimmy

+0

@Shimmy:画像の名前をデータベースに保存するだけです。それは文字列です。 –

+0

新しいイメージごとにGUIDを生成し、その名前をデータベースに保存しました。フォルダはサーバーに保存されず、イメージファイル名だけが保存されます。フォルダは動的に挿入されます。 – Shimmy

答えて

44

まず、あなたは以下が含まれるように表示を変更する必要があります:

<input type="file" name="file" /> 

次にあなたがそうのように、HttpPostedFileBaseを取るためにあなたのポストActionMethodを変更する必要があります:

[HttpPost] 
public ActionResult Create(tblPortfolio tblportfolio, HttpPostedFileBase file) 
{ 
    //you can put your existing save code here 
    if (file != null && file.ContentLength > 0) 
    { 
     //do whatever you want with the file 
    } 
} 
+1

私はあなたのコードを使用して、私はそれが正しく動作すると思うが、それは私にエラーが表示されます: 'C:\ Users \ Administrator \ Desktop \ ND \ MyApp \ MyApp \ Uploads 'が拒否されました。なぜなのかご存知ですか ?なぜ私はこのエラーをローカルで表示していますか? –

+1

Hmmm、アプリケーションプールからWebサイトのIDを確認する必要があります(デフォルトではこれがアプリケーションプールIDです)。 – mattytommo

+1

アプリケーションプールIDをLocalsystemに変更しました。私はlocalsystemに変更しなければならないが、これはどこかに赤いですが、動作していません。 –

3

Requestから入手できます。Request.Filesコレクションを使用して、単一ファイルのアップロードの場合は、Request.Files[0]を使用して最初のインデックスから読み取ります。

複数のファイルをアップロードする場合は
[HttpPost] 
public ActionResult Create(tblPortfolio tblportfolio) 
{ 
if(Request.Files.Count > 0) 
{ 
HttpPostedFileBase file = Request.Files[0]; 
if (file != null) 
{ 
    // business logic here 
} 
} 
} 

、あなたがRequest.Filesコレクションに反復処理する必要があります。

[HttpPost] 
public ActionResult Create(tblPortfolio tblportfolio) 
{ 
for(int i=0; i < Request.Files.Count; i++) 
{ 
    HttpPostedFileBase file = Request.Files[i]; 
    if (file != null) 
    { 
    // Do something here 
    } 
} 
} 

あなたは、AJAXを経由してページを更新せずにファイルをアップロードしたい場合、あなたはタイプ何this article which uses jquery plugin