在ASP.NET中实现多文件上传的方法

时间:2021-05-25

在以前的Web应用中,上传文件是个很麻烦的事,现在有了.NET,文件上传变得轻而易举。下面的这个例子实现了多文件上传功能。可以动态添加输入表单,上传的文件数量没有限制。代码如下:

MultiUpload.aspx

<%@PageLanguage="vb"AutoEventWireup="false"Codebehind="MultiUpload.aspx.vb"
Inherits="aspxWeb.MultiUpload"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<title>多文件上传</title>
<scriptlanguage="JavaScript">
functionaddFile()
{
varstr='<INPUTtype="file"size="50"NAME="File">'
document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str)
}
</script>
</HEAD>
<body>
<formid="form1"method="post"runat="server"enctype="multipart/form-data">
<center>
<asp:LabelRunat="server"ID="MyTitle"></asp:Label>
<Pid="MyFile"><INPUTtype="file"size="50"NAME="File"></P>
<P>
<inputtype="button"value="增加(Add)"onclick="addFile()">
<asp:ButtonRunat="server"Text="上传"ID="Upload"></asp:Button>
<inputonclick="this.form.reset()"type="button"value="重置(ReSet)">
</P>
</center>
<Palign="center">
<asp:Labelid="strStatus"runat="server"Font-Names="宋体"Font-Bold="True"
Font-Size="9pt"Width="500px"BorderStyle="None"BorderColor="White"></asp:Label>
</P>
</form>
</body>
</HTML>
后代码:MultiUpload.aspx.vb

PublicClassMultiUpload
InheritsSystem.Web.UI.Page
ProtectedWithEventsUploadAsSystem.Web.UI.WebControls.Button
ProtectedWithEventsMyTitleAsSystem.Web.UI.WebControls.Label
ProtectedWithEventsstrStatusAsSystem.Web.UI.WebControls.Label

#Region"WebFormDesignerGeneratedCode"

'ThiscallisrequiredbytheWebFormDesigner.
<System.Diagnostics.DebuggerStepThrough()>PrivateSubInitializeComponent()

EndSub

PrivateSubPage_Init(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Init
'CODEGEN:ThismethodcallisrequiredbytheWebFormDesigner
'Donotmodifyitusingthecodeeditor.
InitializeComponent()
EndSub

#EndRegion

PrivateSubPage_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
MyTitle.Text="<h3>多文件上传</h3>"
Upload.Text="开始上传"
If(Me.IsPostBack)ThenMe.SaveImages()
EndSub

PrivateFunctionSaveImages()AsSystem.Boolean
'遍历File表单元素
DimfilesAsSystem.Web.HttpFileCollection=System.Web.HttpContext.Current.Request.Files

'状态信息
DimstrMsgAsNewSystem.Text.StringBuilder("上传的文件分别是:<hrcolor=red>")
DimiFileAsSystem.Int32
Try
ForiFile=0Tofiles.Count-1
'检查文件扩展名字
DimpostedFileAsSystem.Web.HttpPostedFile=files(iFile)
DimfileName,fileExtensionAsSystem.String
fileName=System.IO.Path.GetFileName(postedFile.FileName)
IfNot(fileName=String.Empty)Then
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)
EndIf
Next
strStatus.Text=strMsg.ToString()
ReturnTrue
CatchExAsSystem.Exception
strStatus.Text=Ex.Message
ReturnFalse
EndTry
EndFunction
EndClass
C#版本

UpLoad.aspx

<%@Pagelanguage="c#"Codebehind="UpLoad.aspx.cs"AutoEventWireup="false"Inherits="WebPortal.Upload"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<title>多文件上传</title>
<scriptlanguage="JavaScript">
functionaddFile()
{
varstr='<INPUTtype="file"size="50"NAME="File">'
document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str)
}
</script>
</HEAD>
<body>
<formid="form1"method="post"runat="server"enctype="multipart/form-data">
<divalign="center">
<h3>多文件上传</h3>
<Pid="MyFile"><INPUTtype="file"size="50"NAME="File"></P>
<P>
<inputtype="button"value="增加(Add)"onclick="addFile()">
<inputonclick="this.form.reset()"type="button"value="重置(ReSet)">
<asp:ButtonRunat="server"Text="开始上传"ID="UploadButton"></asp:Button>
</P>
<P>
<asp:Labelid="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

usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Web;
usingSystem.Web.SessionState;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;

namespaceWebPortal
{
///<summary>
///UpLoad的摘要说明。
///实现多文件上传
///</summary>
publicclassUpload:System.Web.UI.Page
{
protectedSystem.Web.UI.WebControls.ButtonUploadButton;
protectedSystem.Web.UI.WebControls.LabelstrStatus;

privatevoidPage_Load(objectsender,System.EventArgse)
{
///在此处放置用户代码以初始化页面
if(this.IsPostBack)this.SaveImages();
}

privateBooleanSaveImages()
{
///'遍历File表单元素
HttpFileCollectionfiles=HttpContext.Current.Request.Files;

///'状态信息
System.Text.StringBuilderstrMsg=newSystem.Text.StringBuilder();
strMsg.Append("上传的文件分别是:<hrcolor=red>");
try
{
for(intiFile=0;iFile<files.Count;iFile++)
{
///'检查文件扩展名字
HttpPostedFilepostedFile=files[iFile];
stringfileName,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();
returntrue;
}
catch(System.ExceptionEx)
{
strStatus.Text=Ex.Message;
returnfalse;
}
}
#regionWeb窗体设计器生成的代码
overrideprotectedvoidOnInit(EventArgse)
{
//
//CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

///<summary>
///设计器支持所需的方法-不要使用代码编辑器修改
///此方法的内容。
///</summary>
privatevoidInitializeComponent()
{
this.ID="Upload";
this.Load+=newSystem.EventHandler(this.Page_Load);

}
#endregion
}
}

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章