2010-08-19 127 views
1

如何在文件上傳到服務器時識別fileupload的輸入(type =「file」)id。在asp.net中的文件上傳器mvc

讓我詳細解釋:

我有我的網頁上有多個文件上傳控制和非同一控制保存在像「Fileupload1」不同的文件夾的文件會保存在「Folder1中」等文件。

回答

4

你不能。發佈表單時發送給服務器的HTML元素的id從不。就name屬性而言,您可能會循環訪問Request.Files集合。在ASP.NET MVC中,使用操作參數更常見。例如:

<form action="" method="post" enctype="multipart/form-data"> 
    <input type="file" name="files" id="file1" /> 
    <input type="file" name="files" id="file2" /> 
    <input type="file" name="files" id="file3" /> 
    <input type="submit" value="Upload files" /> 
</form> 

和你的控制器動作:

[HttpPost] 
public ActionResult Index(IEnumerable<HttpPostedFileBase> files) 
{ 
    foreach (var file in files) 
    { 
     if (file.ContentLength > 0) 
     { 
      var fileName = Path.GetFileName(file.FileName); 
      var path = Path.Combine(Server.MapPath("~/App_Data"), fileName); 
      file.SaveAs(path); 
     } 
    } 
    return RedirectToAction("Index"); 
} 

就這麼簡單。

+0

我有多個文件上傳來上傳文件在服務器上,那麼我如何識別相關的輸入文件。 建議如果你有想法。 – Xulfee 2010-08-19 17:37:09

+0

我怎樣才能得到輸入的名字? – Xulfee 2010-08-19 17:44:19

+0

但它不返回和輸入名稱 – Xulfee 2010-08-19 17:49:10

0

正如Darian指出的那樣,ID不會被髮送。但name屬性,讓你的文件上傳應該是這樣的:

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

這將讓你使用的方法,如

public ActionResult UploadFile(HttpPostedFileBase contactsFile) 
在控制器

+0

你能否提供我詳細解釋的示例代碼。 – Xulfee 2010-08-20 04:39:06

0

您將無法訪問任何DOM元素,因爲ASP.NET MVC使用FileCollectionModelBinder創建文件集合。因此,您在控制器中收到的內容與DOM沒有任何關係。但好事是因爲它是一個可以訪問文件索引的集合。

<input type="file" name="files[0]" id="file1" /> 
    <input type="file" name="files[1]" id="file2" /> 
    <input type="file" name="files[2]" id="file3" /> 

然後,如果你需要上傳的文件[0]到文件夾Y和文件[1]到文件夾±您可以訪問這些文件集合索引。

switch (index) 
{ 
    case 0: 
    // Upload to Y 
    case 1: 
    // Upload to Z 
    default: 
} 
+0

可以向我提供詳細解釋的示例代碼 – Xulfee 2010-08-19 18:23:33