2011-03-15 101 views
0

我正在嘗試編寫一個允許用戶將圖片添加到數據庫的程序,但它失敗了。我將不勝感激,如果有人可以幫助我...我 文件Index.cshtml有以下代碼...MVC 3 - 圖片上傳失敗

<td> 
    @item.Picture1 
    <img alt="@Html.Encode(item.Picture1)" src='@(Url.Action(("Picture1")) + 
    ToString())' width="64" height="64" /> 
</td> 

Create.cshtml文件看起來像這樣...

<div class="editor-field"> 
     @Html.EditorFor(model => model.Picture1) 
     <input type="file" id="fileUpload" name="fileUpload" size="23"/> 
     @Html.ValidationMessage("Picture1", "*") 
</div> 
<p> 
    <input type="submit" value="Create" /> 
</p> 

在控制器,用於創建,我有以下的代碼...

[HttpPost] 
    public ActionResult Create([Bind(Exclude = "SubProductCategoryID")] SubProductCategory2 Createsubcat2, FormCollection values) 
    { 


     if (ModelState.IsValid) 
     { 
      if (Request.Files.Count > 0) 
      { 
      Createsubcat2.Picture1 = (new FileHandler()).uploadedFileToByteArray((HttpPostedFileBase)Request.Files[0]); 
      } 
      db.AddToSubProductCategory2(Createsubcat2); 
      db.SaveChanges(); 
      return RedirectToAction("/"); 
     } 
     PopulateProductCategoryDropDownList(Createsubcat2.ProductCategoryID); 
     return View(Createsubcat2); 
    } 

    public FileResult Image(int id) 
    { 
     const string alternativePicturePath = @"/Content/question_mark.jpg"; 
     SubProductCategory2 product = db.SubProductCategory2.Where(k => k.SubProductCategoryID == id).FirstOrDefault(); 

     MemoryStream stream; 

     if (product != null && product.Picture1 != null) 
     { 
      stream = new MemoryStream(product.Picture1); 
     } 
     else // If product cannot be found or product doesn't have a picture 
     { 
      stream = new MemoryStream(); 

      var path = Server.MapPath(alternativePicturePath); 
      var image = new System.Drawing.Bitmap(path); 

      image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg); 
      stream.Seek(0, SeekOrigin.Begin); 
     } 

     return new FileStreamResult(stream, "image/jpeg"); 
    } 

FileHandler.cs

public class FileHandler 
{ 
    /// <summary> 
    /// Converts a HttpPostedFileBase into a byte array 
    /// </summary> 
    /// <param name="file"></param> 
    /// <returns></returns> 
    public byte[] uploadedFileToByteArray(HttpPostedFileBase file) 
    { 
     int nFileLen = file.ContentLength; 
     byte[] result = new byte[nFileLen]; 

     file.InputStream.Read(result, 0, nFileLen); 

     return result; 
    }  

在此先感謝。我正在使用http://blog-dotnet.com/category/ASPNET-MVC.aspx網站作爲參考。我在C#中使用VS 2010,ASP.NET 4.0,MVC 3。 SQL Server 2008R2。 SubProductCategory2表具有文件Picture1,圖像數據類型。

編輯: 實際工作更多的我有公衆的byte []圖片1 {獲得;組; }在其中一個類中。我現在得到的輸出是System.Byte [] System.Byte []。我該如何解決?

+2

什麼失敗?你有代碼,但沒有任何描述你正在經歷的錯誤/問題 – 2011-03-15 15:37:31

+0

它是如何失敗的?你有錯誤嗎? – 2011-03-15 15:38:22

+0

運行應用程序時沒有錯誤。當我瀏覽以查找圖片,然後單擊創建時,頁面將返回索引,其中沒有圖片僅顯示用戶輸入的文本。 – DiscoDude 2011-03-15 16:31:18

回答

1

除了具有與文件類型的輸入,你需要確保你的形式接受多數據...

<form method="POST" enctype="multipart/form-data" action=""> 

我看不見你的表單元素,以確認是否你已經這樣做了。

+0

嗨Sohnee我在哪裏需要代碼在@using(Html.BeginForm()) – DiscoDude 2011-03-15 16:32:22

+0

實際上更多的工作我有公共字節[] Picture1 {get;組; }在其中一個類中。我現在得到的輸出是System.Byte [] System.Byte []。我該如何解決? – DiscoDude 2011-03-15 16:51:46

+0

因爲我收到錯誤System.Byte []和一個不同的問題到這個線程。也沒有人迴應。我會問一個新問題。所以我希望國防部不會介意。謝謝 – DiscoDude 2011-03-16 13:05:01