|
使用ASP.NET 制作一个可以存放Client 端档案的网页相当容易,因为ASP.NET 里就有提供我们将Client 端档案传至Server 端的对象,这个对象就是HtmlInputFile 对象。HtmlInputFile 对象必须存在窗体中,而且窗体<Form> 标注中必须加入设定Enctype="Multipart/Form-Data" 属性才可使用。HtmlInputFile 对象的语法如下所示: <Input Type="File" Id="被程序所控制的名称" Runat="Server"> 当一个档案传送到Server 端后,接收和处理的是HtmlInputFile 对象的PostedFile 属性。PostedFile 属性的型态是HttpPostedFile 对象类别,其常用属性如下表所示:  其常用方法如下表所示:  基本档案上传 下列范例使用HtmlInputFile 对象的基本用法,分别印出档案的名称、大小、类型: <Html> <Form Enctype="Multipart/Form-Data" Runat="Server"> <Input Type="File" Id="UpLoad" Runat="Server"> <Asp:Button Id="Button1" Text="OK" OnClick="Button1_Click" Runat="Server" /><br> <Asp:Label Id="Label1" Runat="Server" /> </Form> <Script Language="VB" Runat="Server"> Sub Button1_Click(Sender As Object,e As Eventargs) Dim strContent As String If UpLoad.PostedFile.ContentLength<0 Then Label1.Text="上传失败" Else strContent="文件名称:" & UpLoad.PostedFile.FileName strContent=strContent & "<br>档案大小:" & _ Cstr(UpLoad.PostedFile.ContentLength) & "Bytes" strContent=strContent & "<br>档案类型:" & UpLoad.PostedFile.ContentType End If Label1.Text=strContent End Sub </Script> </Html>  存入磁盘 上传档案后若要写入磁盘中也相当容易,只要使用PostedFile 的SaveAs 方法即可。档案写入时若直接将PostedFile.FileName 属性来当文件名写入会有问题,因为FileName 属性包含有档案的路径名称,所以必须先将档案的路径分开。下列范例使用Split 函数来取得文件名称,并将档案存放到网页所在的目录: <Html> <Form Enctype="Multipart/Form-Data" Runat="Server"> <Input Type="File" Id="UpLoad" Runat="Server"> <Asp:Button Id="Button1" Text="OK" OnClick="Button1_Click" Runat="Server" /><br> <Asp:Label Id="Label1" Runat="Server" /> </Form> <Script Language="VB" Runat="Server"> Sub Button1_Click(Sender As Object,e As Eventargs) Dim strContent As String If UpLoad.PostedFile.ContentLength>0 Then strContent="文件名称:" & UpLoad.PostedFile.FileName strContent=strContent & "<br>档案大小:" & Cstr(UpLoad.PostedFile.ContentLength) & "Bytes" strContent=strContent & "<br>档案类型:" & UpLoad.PostedFile.ContentType Dim Temp() As String = Split(UpLoad.PostedFile.FileName, "\" ) Dim Name As String = Temp(Temp.Length-1) UpLoad.PostedFile.SaveAs(Server.MapPath(".") & "\" & Name) Label1.Text=strContent Else Label1.Text="上传失败" End If End Sub </Script> </Html> Split 函数会将一个字符串以我们设定的条件为分隔,并将分段后的字符串存至一个字符串数组中;所以我们只要以"\" 为条件来分隔档案,在字符串数组中的最后一个元素即为文件名称。 多档上传 我们也可以一次上传多个档案。管理档案的对象是Request 对象的Files 属性,它的型别是HttpFileCollection 集合对象类别,它的项目成员是HttpPostedFile 类别对象。HttpFileCollection型别变量的常用属性如下表所示:  其常用方法如下表所示:  下列范例中我们放了两个HtmlInputFile 对象,并上传两个档案: <Html> <Form Enctype="Multipart/Form-Data" Runat="Server"> <Input Type="File" Id="UpLoad1" Runat="Server"><br> <Input Type="File" Id="UpLoad2" Runat="Server"> <Asp:Button Id="Button1" Text="OK" OnClick="Button1_Click" Runat="Server"/><br> <Asp:Label Id="Label1" Runat="Server"/> </Form> <Script Language="VB" Runat="Server"> Sub Button1_Click(Sender As Object,e As EventArgs) Dim shtI As short Dim strContent As String Dim Files As HttpFileCollection Files=Request.Files For shtI=0 To Files.Count-1 If Files.Item(shtI).ContentLength>0 Then strContent=strContent & "第" & Cstr(shtI+1) & "个档案上传对象 <br>" strContent=strContent & "文件名称:" & Files.Item(shtI).FileName & "<br>" strContent=strContent & "档案大小:" & Cstr(Files.Item(shtI).ContentLength)_ & "Byte<br>" strContent=strContent & "档案类型:" & Files.Item(shtI).ContentType & "<p>" Dim Temp() As String = Split( Files.Item(shtI).FileName, "\") Dim Name As String = Temp(Temp.Length-1) Files.Item(shtI).SaveAs(Server.MapPath(".") & "\" & Name) End If Next Label1.Text=strContent End Sub </Script> </Html>  上述范例中我们先定义一个HttpFileCollection 类型变量Files,并将Request.Files 属性的内容放到Files 变量中。再使用For....Next 循环将档案信息加入strContent 变量中,再以Split 函数将档案路径和文件名称分开并且存到一数组,因数组的最后一个元素即为文件名称,因此个别取出后使用HttpPostedFile 对象的SaveAs 方法将档案写入磁盘。
| 上网速度更快更爽、更安全下载使用Firefox火狐浏览器
|
|