2012-03-03 73 views
1

我試圖顯示我以前在視圖中加載的圖像,但沒有成功。 圖片上傳,這是肯定的。到目前爲止,我已經寫了這樣的事情:保存/檢索圖像。 ASP.NET MVC

@if(Model.AttachedInformation.Count > 0) 
{ 
    <div id="gallery"> 
     @foreach(var path in Model.AttachedInformation) 
     { 
      <img src="@path" alt="default_description" title="some_title" /> 
     } 
    </div> 
} 

AttachedInformation只是一個ICollection<String>對象。

但這隻給我圖像的邊界。此外,我檢查了@path變量,它確實保留了完整的文件路徑。

建議感激! 謝謝!

編輯:CONTROLLER

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(Employee employee, IEnumerable<HttpPostedFileBase> files) 
{ 
    if(ModelState.IsValid) 
    { 
     var filepath = String.Empty; 

     foreach(var file in files) 
     { 
      if(null != file && file.ContentLength > 0) 
      { 
       filepath = Path.Combine(
        HttpContext.Server.MapPath("~/Content/Images/Uploads"), 
        Path.GetFileName(file.FileName) 
       ); 
       file.SaveAs(filepath); 
       employee.AttachedInformation.Add(filepath); 
      } 
     }     

     this.repository.Add(employee); 

     return Redirect("/"); 
    } 
    else 
    { 
     return View(employee); 
    } 
} 

模型

AbstractEntity保持VersionID性能。

[Serializable] 
public class Employee : AbstractEntity<Employee>, IAggregateRoot 
{ 
    public Employee() 
    { 
     this.AttachedInformation = new HashSet<String>(); 
    } 

    public virtual String FirstName { get; set; } 
    public virtual String MiddleName { get; set; } 
    public virtual String LastName { get; set; } 
    public virtual String SSN { get; set; } 
    public virtual String EmployeeNumber { get; set; } 
    public virtual String TradeUnionNumber { get; set; } 
    public virtual String Department { get; set; } 
    public virtual String Post { get; set; } 
    public virtual DateTime DateOfHire { get; set; } 
    public virtual DateTime DateOfBirth { get; set; } 
    public virtual ICollection<String> AttachedInformation { get; set; } 
} 

VIEW

視圖包含多個input s的名字files像:

<input type="file" name="files" id="additional" class=" " accept="image/jpeg,image/png,image/gif" /> 

RAW HTML

<div id="gallery"> 
    <img src="D:\Programming.Projects\BOA\branches\BOA.PresentationLayer\Content\Images\Uploads\Desert.jpg" alt="default_description" title="some_title" /> 
    <img src="D:\Programming.Projects\BOA\branches\BOA.PresentationLayer\Content\Images\Uploads\Hydrangeas.jpg" alt="default_description" title="some_title" /> 
    <img src="D:\Programming.Projects\BOA\branches\BOA.PresentationLayer\Content\Images\Uploads\Jellyfish.jpg" alt="default_description" title="some_title" /> 
    <img src="D:\Programming.Projects\BOA\branches\BOA.PresentationLayer\Content\Images\Uploads\Koala.jpg" alt="default_description" title="some_title" /> 
</div> 

BOUNTY

我需要的是得到一個說明的例子(工程)。謝謝!

+1

「真的保留完整的文件路徑」在'file:///'路徑中嗎?或者路徑實際上在瀏覽器中工作? – EAMann 2012-03-03 00:42:38

+2

請提供該功能的HTML輸出...(或者當您轉到頁面時可能會出現一些錯誤?) – debracey 2012-03-03 00:44:09

+0

您是否可以添加一個控制器來顯示如何填充模型? – 2012-03-03 00:45:16

回答

1

好的。我找到了解決方案。也許這對別人有用。

var directory = "/Content/Images/Uploads/" + employee.SSN; 
var path = String.Empty; 

if(!Directory.Exists(Server.MapPath(directory))) 
{ 
    Directory.CreateDirectory(Server.MapPath(directory)); 
} 

foreach(var file in files) 
{ 
    if(null != file && file.ContentLength > 0) 
    { 
     path = Path.Combine(directory + "/", Path.GetFileName(file.FileName)); 
     file.SaveAs(Server.MapPath(path)); 
     employee.AttachedInformation.Add(path); 
    } 
} 

這對我很有用。更正讚賞。

+0

SSN不是唯一的......他們的SSN也將位於每個代理服務器文件夾中。不安全。如果你必須使用SSN,那麼至少要散列它如何隨機字符串 – ggonsalv 2012-03-06 18:38:00

+0

好的,謝謝!請參閱..使用'Id'非常複雜,因爲它會在實體保存到存儲庫時生成。 – lexeme 2012-03-06 20:07:22

+1

不,我的意思是計算一個單向散列將SSN轉換爲其他東西.. http://stackoverflow.com/questions/5264644/how-to-obtain-one-way-hash-for-given-string-in -net – ggonsalv 2012-03-08 05:03:07

4
HttpContext.Server.MapPath("~/Content/Images/Uploads") 

上面將給你磁盤上的完整路徑,然後你將其保存到員工記錄。您應該保存文件的名稱,然後將圖像採集到〜/ Content/Images/Uploads/

另一個需要注意的是,您將通過文件名將所有圖像保存到同一個目錄中。如果兩個用戶上傳同名的文件,則會覆蓋另一個文件。每位員工都應該有自己的上傳目錄,否則應該動態生成文件名。

+0

同意!特別是關於覆蓋。所以我可能會添加id作爲路徑的一部分,所以它會是獨一無二的!你能否說明你的〜/內容/圖片/上傳/'? – lexeme 2012-03-03 07:43:35

+2

爲了防止大量的子目錄,我們還使用了GUID文件名(以及爲了顯示目的保存上傳的文件名)。這樣,我們擁有唯一的存儲文件名,但可以呈現用戶上載的名稱,並避免(主要)在存儲到磁盤時衝突文件名。我的2美分:) – Tommy 2012-03-03 16:43:57