Asp.Net 實現多檔案上傳的方法

來源:互聯網
上載者:User
Asp.Net 2.0 實現多檔案上傳的方法【摘要】
多檔案上傳的方法其實很簡單,在頁面上添加多個html檔案上傳控制項,就可在代碼中用如下語句System.Web.HttpContext.Current.Request.Files來取得頁面中的所有檔案上傳控年對象,然後調用 Files對象的SaveAs就可將多個檔案上傳上去,跟單檔案上傳沒有多大區別。
【全文】

如下程式碼範例,可將多個檔案上傳到伺服器,並顯示在表格中和列表框中,並可將列表框中選擇的檔案從伺服器刪除掉。
[分頁檔HTML]
<%@ Page Language="C#" AutoEventWireup="true"   CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script language="JavaScript">
function addFile()
{
     //添加檔案上傳Html組件
var str ='<input type="file" name="File" class="FileUpStyle" /><br>'
document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str)
}
function Button1_onclick() {
     //重設檔案上傳Html組件
     var str='<input type="file" name="File"class="FileUpStyle" id="File1" /> ';
     str=str+'<br>';
     document.getElementById('MyFile').innerHTML=str;
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
     <title>多檔案上傳樣本</title>
     <STYLE TYPE="text/css" MEDIA=screen>
         <!--

.FileUpStyle {
font-size: 12px;
font-weight: lighter;
font-variant: normal;
border: 1px solid #006699;
width: 250px;
}
         -->
     </STYLE>
</head>
<body style="font-size: 9pt; color: #000066;">
     <form id="form1" runat="server" enctype="multipart/form-data">
         多檔案上傳樣本<br />
            <input type="button" value="增加" onclick="addFile()" style="border-right: #6699cc 1px solid; border-top: #6699cc 1px solid; font-size: 9pt; border-left: #6699cc 1px solid; width: 60px; border-bottom: #6699cc 1px solid">
           <input type="button" value="重設" style="border-right: #6699cc 1px solid; border-top: #6699cc 1px solid; font-size: 9pt; border-left: #6699cc 1px solid; width: 60px; border-bottom: #6699cc 1px solid; height: 20px" id="Button1" language="javascript" onclick="return Button1_onclick()">
           <asp:Button Runat="server" Text="上傳" ID="Upload" OnClick="Upload_Click1" BorderColor="Desktop" BorderWidth="1px" Height="20px" Width="60px" ></asp:Button>
         <asp:Button ID="btn_Refresh" runat="server" BorderColor="Desktop" BorderWidth="1px" Height="20px"
             Text="重新整理目錄" Width="60px" OnClick="btn_Refresh_Click" /><br />
         <div id="MyFile">
          <input name="File" type="file" class="FileUpStyle" id="File1"/>
         <br />
         </div>
         已上傳的檔案:<asp:LinkButton ID="btn_del" runat="server" OnClick="btn_del_Click" OnClientClick="return confirm('確認要網站上刪除此檔案嗎?')">刪除選擇的檔案</asp:LinkButton><br />
         <asp:DropDownList ID="drp1" runat="server" Width="250px">
         </asp:DropDownList>
         &nbsp;&nbsp;
         <asp:Table ID="tableDirInfo" runat="server" ForeColor="#000040">
         </asp:Table>
     </form>
</body>
</html>
[程式碼檔案CODE]
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

public partial class _Default : System.Web.UI.Page
{

     protected void Page_Load(object sender, EventArgs e)
     {
     }
     protected void Upload_Click1(object sender, EventArgs e)
     {

         HttpFileCollection _files = System.Web.HttpContext.Current.Request.Files;

         for (int i = 0; i < _files.Count; i++)
         {
             string ShortFileName=_files[i].FileName.Substring(_files[i].FileName.LastIndexOf("\\")+1);
             if (ShortFileName != "")
             {
                 _files[i].SaveAs(Server.MapPath("~/Files/" + ShortFileName));
                 //Page.Response.Write("檔案名稱:[" + ShortFileName + "]上傳成功!<br>");              
             }
            
         }
     }
     private void ShowFileList()
     {
         string strCurDir, FileName, FileExt;
         //檔案大小
         long FileSize;
         //最後修改時間;
         DateTime FileModify;

         //初始化時,預設為當前頁面所在的目錄
         strCurDir = Server.MapPath("Files");

         FileInfo fi;
         DirectoryInfo dir;
         TableCell td;
         TableRow tr;
         tr = new TableRow();
         //動態添加儲存格內容
         td = new TableCell();
         td.Controls.Add(new LiteralControl("檔案名稱"));
         tr.Cells.Add(td);
         td = new TableCell();
         td.Controls.Add(new LiteralControl("檔案類型"));
         tr.Cells.Add(td);
         td = new TableCell();
         td.Controls.Add(new LiteralControl("檔案大小"));
         tr.Cells.Add(td);
         td = new TableCell();
         td.Controls.Add(new LiteralControl("最後修改時間"));
         tr.Cells.Add(td);

         tableDirInfo.Rows.Add(tr);
         //針對目前的目錄建立目錄引用對象
         DirectoryInfo dirInfo = new DirectoryInfo(strCurDir);
        
         //清除Table中所有行
         for (int j = 0; j < tableDirInfo.Rows.Count; j++)
             tableDirInfo.Rows.RemoveAt(j);
         drp1.Items.Clear();
        
         //迴圈判斷目前的目錄下的檔案和目錄
         foreach (FileSystemInfo fsi in dirInfo.GetFileSystemInfos())
         {
             FileName = "";
             FileExt = "";
             FileSize = 0;
             //如果是檔案
             if (fsi is FileInfo)
             {
                 fi = (FileInfo)fsi;
                 //取得檔案名稱
                 FileName = fi.Name;
                 drp1.Items.Add(FileName);

                 //取得檔案的副檔名
                 FileExt = fi.Extension;
                 //取得檔案的大小
                 FileSize = fi.Length;
                 //取得檔案的最後修改時間
                 FileModify = fi.LastWriteTime;
             }
             else//否則是目錄
             {
                 dir = (DirectoryInfo)fsi;
                 //取得目錄名
                 FileName = dir.Name;
                 //取得目錄的最後修改時間
                 FileModify = dir.LastWriteTime;
                 //設定檔案的副檔名為"檔案夾"
                 FileExt = "檔案夾";
             }
             //動態添加表格內容
             tr = new TableRow();
             td = new TableCell();
             td.Controls.Add(new LiteralControl(FileName));
             tr.Cells.Add(td);
             td = new TableCell();
             td.Controls.Add(new LiteralControl(FileExt));
             tr.Cells.Add(td);
             td = new TableCell();
             td.Controls.Add(new LiteralControl(FileSize.ToString() + "位元組"));
             tr.Cells.Add(td);
             td = new TableCell();
             td.Controls.Add(new LiteralControl(FileModify.ToString("yyyy-mm-dd hh:mm:ss")));
             tr.Cells.Add(td);
             tableDirInfo.Rows.Add(tr);
         }
     }
     protected void btn_Refresh_Click(object sender, EventArgs e)
     {
         //重新整理目錄列表
         ShowFileList();
     }
     protected void btn_del_Click(object sender, EventArgs e)
     {
         //刪除選擇的檔案
         if (drp1.Items.Count != 0)
         {
             System.IO.File.Delete(Server.MapPath("Files/" + drp1.SelectedItem.Text));
             ShowFileList();
         }
     }
}

方法二

在以前的Web應用中,上傳檔案是個很麻煩的事,現在有了.NET,檔案上傳變得輕而易舉。下面的這個例子實現了多檔案上傳功能。可以動態添加輸入表單,上傳的檔案數量沒有限制。代碼如下:
UpLoad.aspx

<%@ Page language="c#" Codebehind="UpLoad.aspx.cs" AutoEventWireup="false" Inherits="WebPortal.Upload" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>多檔案上傳</title>
<script language="JavaScript">
function addFile()
{
var str = '<INPUT type="file" size="50" NAME="File">'
document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str)
}
</script>
</HEAD>
<body>
<form id="form1" method="post" runat="server" enctype="multipart/form-data">
<div align="center">
<h3>多檔案上傳</h3>
<P id="MyFile"><INPUT type="file" size="50" NAME="File"></P>
<P>
<input type="button" value="增加(Add)" onclick="addFile()">
<input onclick="this.form.reset()" type="button" value="重設(ReSet)">
<asp:Button Runat="server" Text="開始上傳" ID="UploadButton"></asp:Button>
</P>
<P>
<asp:Label id="strStatus" runat="server" Font-Names="宋體" Font-Bold="True" Font-Size="9pt"
Width="500px" BorderStyle="None" BorderColor="White"></asp:Label>
</P>
</div>
</form>
</body>
</HTML>

UpLoad.aspx.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace WebPortal
{
/// <summary>
/// UpLoad 的摘要說明。
/// 實現多檔案上傳
/// </summary>
public class Upload : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button UploadButton;
protected System.Web.UI.WebControls.Label strStatus;

private void Page_Load(object sender, System.EventArgs e)
{
/// 在此處放置使用者代碼以初始化頁面
if (this.IsPostBack) this.SaveImages();
}

private Boolean SaveImages()
{
///'遍曆File表單元素
HttpFileCollection files = HttpContext.Current.Request.Files;

/// '狀態資訊
System.Text.StringBuilder strMsg = new System.Text.StringBuilder();
strMsg.Append("上傳的檔案分別是:<hr color=red>");
try
{
for(int iFile = 0; iFile < files.Count; iFile++)
{
///'檢查副檔名字
HttpPostedFile postedFile = files[iFile];
string fileName, fileExtension;
fileName = System.IO.Path.GetFileName(postedFile.FileName);
if (fileName != "")
{
fileExtension = System.IO.Path.GetExtension(fileName);
strMsg.Append("上傳的檔案類型:" + postedFile.ContentType.ToString() + "<br>");
strMsg.Append("用戶端檔案地址:" + postedFile.FileName + "<br>");
strMsg.Append("上傳檔案的檔案名稱:" + fileName + "<br>");
strMsg.Append("上傳檔案的副檔名:" + fileExtension + "<br><hr>");
///'可根據副檔名字的不同儲存到不同的檔案夾
///注意:可能要修改你的檔案夾的匿名寫入許可權。
postedFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("images/") + fileName);
}
}
strStatus.Text = strMsg.ToString();
return true;
}
catch(System.Exception Ex)
{
strStatus.Text = Ex.Message;
return false;
}
}
#region Web Form設計器產生的程式碼
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 該調用是 ASP.NET Web Form設計器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 設計器支援所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內容。
/// </summary>
private void InitializeComponent()
{
this.ID = "Upload";
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.