2013-07-03 14 views
27

Mam kontrolę przesyłania plików. Teraz po kliknięciu tego chcę wybrać wiele plików.Jak wybrać wiele plików za pomocą Kontroli przesyłania plików?

Jak mogę to zrobić?

+4

Zacząłbym od Googling 'asp.net file upload multiple' lub look [tutaj] (http://stackoverflow.com/questions/5508505/multi-file-upload-using-c-sharp-on-asp -net-4-0-environment), [tutaj] (http://stackoverflow.com/questions/1222330/multiple-file-selection-for-uploading-in-asp-net) lub [tutaj] (http://stackoverflow.com/questions/3550154/select-multiple-files-to-upload-in-asp-net-promie- bez -flash) na przepełnieniu stosu – Basic

+15

@Basic - Ironia. Rok później wypróbowałem w Google plik "asp.net file upload multiple", a Twój komentarz oznacza, że ​​pojawi się na szczycie. –

+1

@Rudi Przepraszamy! Przynajmniej dałem trzy dobre linki ... – Basic

Odpowiedz

39

Właściwość FileUpload.AllowMultiple w .NET 4.5 i wyższej pozwoli Ci wybrać wiele plików.

<asp:FileUpload ID="fileImages" AllowMultiple="true" runat="server" /> 

.NET 4 i poniżej

<asp:FileUpload ID="fileImages" Multiple="Multiple" runat="server" /> 

na stanowisku-back, można następnie:

Dim flImages As HttpFileCollection = Request.Files     
For Each key As String In flImages.Keys 
    Dim flfile As HttpPostedFile = flImages(key) 
    flfile.SaveAs(yourpath & flfile.FileName) 
Next 
+0

jest to w wersji 4.5? Używam wersji niższej –

+0

wszystkie wersje obsługuje @Anand Thangappan Code – skhurams

+0

co to jest 'flBanner'? – User7291

26

Oto pełna przykładem tego, jak można wybrać i przesłać kilka plików w ASP.NET stosując kontrolę przesyłania plików ....

napisać ten kod w pliku .aspx ..

<head runat="server"> 
    <title></title> 
</head> 
<body> 
<form id="form1" runat="server" enctype="multipart/form-data"> 
<div> 
    <input type="file" id="myfile" multiple="multiple" name="myfile" runat="server" size="100" /> 
    <br /> 
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 
    <br /> 
    <asp:Label ID="Span1" runat="server"></asp:Label> 
</div> 
</form> 
</body> 
</html> 

potem napisać ten kod w pliku .aspx.cs ..

protected void Button1_Click(object sender,EventArgs e) { 
      string filepath = Server.MapPath("\\Upload"); 
      HttpFileCollection uploadedFiles = Request.Files; 
      Span1.Text = string.Empty; 

      for(int i = 0;i < uploadedFiles.Count;i++) { 
       HttpPostedFile userPostedFile = uploadedFiles[i]; 

       try { 
        if (userPostedFile.ContentLength > 0) { 
        Span1.Text += "<u>File #" + (i + 1) + "</u><br>"; 
        Span1.Text += "File Content Type: " + userPostedFile.ContentType  + "<br>"; 
        Span1.Text += "File Size: " + userPostedFile.ContentLength   + "kb<br>"; 
        Span1.Text += "File Name: " + userPostedFile.FileName + "<br>"; 

        userPostedFile.SaveAs(filepath + "\\" + Path.GetFileName(userPostedFile.FileName));     
        Span1.Text += "Location where saved: " + filepath + "\\" + Path.GetFileName(userPostedFile.FileName) + "<p>"; 
        } 
       } catch(Exception Ex) { 
        Span1.Text += "Error: <br>" + Ex.Message; 
       } 
      } 
     } 
    } 

i gotowe ... Twoja kontrola przesyłania wielu plików jest gotowa ... mam szczęśliwy dzień.

+0

Ten kawałek kodu to wielkie dzięki. Jednak HttpPostedFile.ContentLength jest wyrażany w bajtach, a nie w kilobitach ... –

0

Można spróbować poniżej kodu:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Try 
     Dim j As Integer = 0 
     Dim hfc As HttpFileCollection = Request.Files 
     Dim PathName As String 
     For i As Integer = 0 To hfc.Count - 1 
      Dim hpf As HttpPostedFile = hfc(i) 

      If hpf.ContentLength > 0 Then 
       hpf.SaveAs(Server.MapPath("~/E:\") & System.IO.Path.GetFileName(hpf.FileName)) 
       PathName = Server.MapPath(hpf.FileName) 

       If j < hfc.Count Then 
        Dim strConnString As String = ConfigurationManager.ConnectionStrings("conString").ConnectionString 
        Dim sqlquery As String 
        sqlquery = "Insert_proc" 
        Dim con As New SqlConnection(strConnString) 
        Dim cmd As New SqlCommand(sqlquery, con) 

        cmd.CommandType = CommandType.StoredProcedure 

        cmd.Parameters.Add("@FilePath", SqlDbType.VarChar).Value = PathName 
        j = j + 1 

        Try 
         con.Open() 
         cmd.ExecuteNonQuery() 


        Catch ex As Exception 
         Throw ex 
        Finally 
         con.Close() 
         con.Dispose() 

        End Try 
        If j = hfc.Count Then 
         Exit Sub 
        End If 
       End If 
      End If 
     Next 

    Catch generatedExceptionName As Exception 

     Throw 
    End Try 
End Sub 
2

kodu Defalult.aspx

<asp:FileUpload runat="server" id="fileUpload1" Multiple="Multiple"> 
     </asp:FileUpload> 
<asp:Button runat="server" Text="Upload Files" id="uploadBtn"/> 

Defalult.aspx.VB

Protected Sub uploadBtn_Click(sender As Object, e As System.EventArgs) Handles uploadBtn.Click 
    Dim ImageFiles As HttpFileCollection = Request.Files 
    For i As Integer = 0 To ImageFiles.Count - 1 
    Dim file As HttpPostedFile = ImageFiles(i) 
     file.SaveAs(Server.MapPath("Uploads/") & file.FileName) 
    Next  
End Sub 
4

krok 1: dodaj

<asp:FileUpload runat="server" id="fileUpload1" Multiple="Multiple"> 
    </asp:FileUpload> 

krok 2: dodaj

Protected Sub uploadBtn_Click(sender As Object, e As System.EventArgs) Handles uploadBtn.Click 
    Dim ImageFiles As HttpFileCollection = Request.Files 
    For i As Integer = 0 To ImageFiles.Count - 1 
     Dim file As HttpPostedFile = ImageFiles(i) 
     file.SaveAs(Server.MapPath("Uploads/") & ImageFiles(i).FileName) 
    Next 

End Sub 
+0

To faktycznie działa i powinno być zaakceptowaną odpowiedzią. – Rich

1

Aby dodać wiele plików skorzystać z poniższego kodu

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
    .fileUpload{ 
    width:255px;  
    font-size:11px; 
    color:#000000; 
    border:solid; 
    border-width:1px; 
    border-color:#7f9db9;  
    height:17px; 
    } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <div id="fileUploadarea"><asp:FileUpload ID="fuPuzzleImage" runat="server" CssClass="fileUpload" /><br /></div><br /> 
    <div><input style="display:block;" id="btnAddMoreFiles" type="button" value="Add more images" onclick="AddMoreImages();" /><br /> 
     <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Upload" /> 
     </div> 
    </div> 
    <script language="javascript" type="text/javascript"> 
     function AddMoreImages() { 
      if (!document.getElementById && !document.createElement) 
       return false; 
      var fileUploadarea = document.getElementById("fileUploadarea"); 
      if (!fileUploadarea) 
       return false; 
      var newLine = document.createElement("br"); 
      fileUploadarea.appendChild(newLine); 
      var newFile = document.createElement("input"); 
      newFile.type = "file"; 
      newFile.setAttribute("class", "fileUpload"); 

      if (!AddMoreImages.lastAssignedId) 
       AddMoreImages.lastAssignedId = 100; 
      newFile.setAttribute("id", "FileUpload" + AddMoreImages.lastAssignedId); 
      newFile.setAttribute("name", "FileUpload" + AddMoreImages.lastAssignedId); 
      var div = document.createElement("div"); 
      div.appendChild(newFile); 
      div.setAttribute("id", "div" + AddMoreImages.lastAssignedId); 
      fileUploadarea.appendChild(div); 
      AddMoreImages.lastAssignedId++; 
     } 

    </script> 
    </form> 
</body> 
</html> 

serwerze kodu boczny:

try 
{ 
    HttpFileCollection hfc = Request.Files; 
    for (int i = 0; i < hfc.Count; i++) 
    { 
     HttpPostedFile hpf = hfc[i]; 
     if (hpf.ContentLength > 0) 
     {       
      hpf.SaveAs(Server.MapPath("~/uploads/") +System.IO.Path.GetFileName(hpf.FileName);       
     } 
    } 
} 
catch (Exception) 
{ 
    throw; 
} 
3
 aspx code 

      <asp:FileUpload ID="FileUpload1" runat="server" AllowMultiple="true" /> 
      <asp:Button ID="btnUpload" Text="Upload" runat="server" OnClick ="UploadMultipleFiles" accept ="image/gif, image/jpeg" /> 
      <hr /> 
      <asp:Label ID="lblSuccess" runat="server" ForeColor ="Green" /> 


    Code Behind: 

protected void UploadMultipleFiles(object sender, EventArgs e) 
{ 
    foreach (HttpPostedFile postedFile in FileUpload1.PostedFiles) 
    { 
      string fileName = Path.GetFileName(postedFile.FileName); 
      postedFile.SaveAs(Server.MapPath("~/Uploads/") + fileName); 
    } 
    lblSuccess.Text = string.Format("{0} files have been uploaded successfully.", FileUpload1.PostedFiles.Count); 
} 
1

Obiekt FileUpload.AllowMultiple w .NET 4.5 i wyższe pozwoli Ci kontrolę, aby wybrać wiele plików.

Poniżej 4,5 jak 4,0 (VS 2010) możemy użyć jQuery do wielokrotnego przesłanie pliku w pojedynczej kontroli, stosując 2 js pliki: http://code.jquery.com/jquery-1.8.2.js i http://code.google.com/p/jquery-multifile-plugin/

w aspx Prześlij plik tagu, dodaj jak class = "multi "przykładem

<asp:FileUpload ID="FileUpload1" class="multi" runat="server" /> 

Jeśli chcesz iść do pracy link pobierania próbki.

Powiązane problemy