asp.net 中一次上传多个文件

看到一篇老外的文章,说在asp.net 中,如何先让用户把要上传的文件都选好了,然后一次上传,
今小结如下

首先在页面加一个上传文件控件,一个“attach"按钮,一个listbox,用来存放等待上传的文件名,
一个"UPLOAD"按钮,一个”删除按钮
 <form id="Form1" method="post" runat="server">
   <INPUT id="FileUpload" style="Z-INDEX: 101; LEFT: 83px; WIDTH: 489px; POSITION: absolute; TOP: 67px; HEIGHT: 22px"
  type="file" size="62" runat="server">
   <asp:button id="btnAttach" style="Z-INDEX: 102; LEFT: 591px; POSITION: absolute; TOP: 66px"
    runat="server" Text="Attach"></asp:button><asp:listbox id="ListBox1" style="Z-INDEX: 103; LEFT: 84px; POSITION: absolute; TOP: 104px" runat="server"
    Width="565px" Height="93px"></asp:listbox><asp:button id="btnUpload" style="Z-INDEX: 104; LEFT: 91px; POSITION: absolute; TOP: 198px"
    runat="server" Text="Upload"></asp:button><asp:button id="btnDelete" style="Z-INDEX: 105; LEFT: 684px; POSITION: absolute; TOP: 131px"
    runat="server" Text="Delete" Width="58px"></asp:button>
   <asp:Label id="Label1" style="Z-INDEX: 106; LEFT: 166px; POSITION: absolute; TOP: 199px" runat="server"
    Width="476px" ForeColor="Red"></asp:Label></form>

之后,在"attach"按钮中代码如下:
private void btnAttach_Click(object sender, System.EventArgs e)
  {
   // Save the attached file to fileName variable
   string fileName = FileUpload.PostedFile.FileName;

   // If the counter is null then create one with default value equal to 0
   if(ViewState["i"] == null)
   {
    ViewState["i"]= 0;
   }
   // Check if a file is selected
   if(fileName != null || fileName != string.Empty)
   {
    // Add  it to the collection
    ListBox1.Items.Add(FileUpload.PostedFile.FileName);

    // Save an index for each selected file
    int i = Convert.ToInt32(ViewState["i"]);

    // Save the fileupload control into a different session
    Session["myupload" + i] = FileUpload;

    // Increment the counter
    i++;

    // Set the ViewSate to the latest counter value.
    ViewState["i"] = i;
    
   }
  }

很明显,其实是用viewstate来存放用户上传的实际文件名,这需要用户在选择文件后用
"attach"按钮来将文件添加到那个listbox框中去
之后是“upload"的代码,
 private void btnUpload_Click(object sender, System.EventArgs e)
  {
   int sessionCount = Session.Count;
   
   
   ///int sessionCount = Convert.ToInt32(ViewState["i"]);
   for( int i =sessionCount-1;i>=0;i--)
   {
    if(sessionCount <= 3)
    {
     HtmlInputFile hif = (HtmlInputFile)Session["myupload" + i];
     if(hif.PostedFile.ContentLength <= 500000)
     {
      string storePath = Server.MapPath("~") + "/MultipleUpload";
      if(!Directory.Exists(storePath))
       Directory.CreateDirectory(storePath);
      hif.PostedFile.SaveAs(storePath  + "/" +  Path.GetFileName(hif.PostedFile.FileName));
      Label1.Text = "Your Files are uploaded successfully";
      ListBox1.Items.Clear();
     }
     else
     Label1.Text = "An error occured";
    }
    else
     Label1.Text = "You have exceeded the maximum number of files to be uploaded (3)";
     
   }
   Session.RemoveAll();
  }

   实际上是将所有的要上传的文件从session里取回来,然后每一个逐一上传
最后是把要上传的文件从listbox里删除的代码,在session里remove掉
private void btnDelete_Click(object sender, System.EventArgs e)
  {
   if(ListBox1.SelectedIndex > -1)
   {
    int uploadedFileIndex = ListBox1.SelectedIndex;
    Session.Remove("myupload" + uploadedFileIndex);
    ListBox1.Items.Remove(ListBox1.SelectedValue);
   }
  }

  总结一下,用在上传文件不多的情况下比较好,因为要用session




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET MVC框架提供了多种方法来实现一次上传多张图片的功能。 一种常见的方法是在前端使用HTML5的文件选择控件来实现多文件上传。在HTML页面,我们可以使用<input type="file" multiple/>来创建一个文件上传控件,multiple属性表示可以选择多个文件。当用户选择了多张图片后,这些图片会被封装成一个FileList对象,我们可以通过JavaScript将FileList对象传递给后端。 在后端,我们可以使用ASP.NET MVC的控制器来处理这些上传的图片。在控制器的方法,我们可以通过参数绑定来接收上传文件。可以使用HttpPostedFileBase类型的数组来接收多个文件,并通过循环遍历每个文件进行处理。对于每个文件,我们可以使用其FileName属性获取文件名,使用SaveAs方法保存文件到服务器指定的路径。 另一种方法是使用第三方插件或库来简化多文件上传的实现。例如,可以使用FineUploader、Dropzone.js等插件来实现多文件上传的功能。这些插件提供了专门的JavaScript API和样式来处理文件上传操作,并且可以与ASP.NET MVC框架无缝集成。 总体而言,实现ASP.NET MVC一次上传多张图片的功能可以通过HTML5的文件选择控件及其API,或使用第三方插件来实现。无论使用哪种方法,我们都需要在前端进行多文件选择和上传操作,并在后端控制器接收和处理上传文件。当然,为了确保上传文件不会超过服务器的负载能力,我们还可以在前端和后端进行一些限制和校验,比如限制上传文件的数量和大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值