如何在ASP.NET里用HtmlInputFile控件来上载文件。

(華版)

以前要在ASP里上载文件真的要写一大堆程序。。。比如说把文件分段转换成Base64然后才上载到服务器,而在服务器那边由要从Base64转会原本的byte值才可以分段写如文件中。但是在ASP.NET里就完全只需用一行代码加一个HtmlInputFile控件就能做完这些复杂的程序。

而要注意的就是紧记在包含HtmlInputFile控件的Form里多添加一个enctype的属性,enctype="multipart/form-data";然后再用HtmlInputFile控件里的PostedFile.SaveAs方法来上载文件就可以了。

 

<form id="Form1" method="post" runat="server" enctype="multipart/form-data">
  
</form>

        '声明变量
        Dim filename As String
        
Dim data() As String

        
Try
            
'检查所选文件大小
            If PostFileName.PostedFile.ContentLength = 0 Then
                
'显示上载结果
                Label3.Text = "上载失败!"
            Else
                
'显示所选文件资料
                Label2.Text = "文件大小:" & PostFileName.PostedFile.ContentLength & " bytes<br>"
                Label2.Text = Label2.Text & "文件类型:" & PostFileName.PostedFile.ContentType & "<br>"
                Label2.Text = Label2.Text & "文件名称:" & PostFileName.PostedFile.FileName & "<br>"

                '读取文件名称
                data = Split(PostFileName.PostedFile.FileName, "\")
                
'上载文件到服务器
                PostFileName.PostedFile.SaveAs(Server.MapPath("."& "\" & data(UBound(data)))

                
'显示上载结果
                With Label3
                    .Text 
= "上载成功!"
                    .ForeColor = Color.DarkGreen
                
End With
            
End If
        
Catch ex As Exception
            
'显示错误讯息
            With Label3
                .Text 
= "Error: " & ex.Message
                .ForeColor 
= Color.Red
            
End With
        
End Try

整体来说,最为麻烦的也不过是要从PostedFile.FileName里读取真整的文件名称(不包括括file path);不过这也大可用以下的简短代码来完成。

'读取文件名称
data = Split(PostFileName.PostedFile.FileName, "\")
'文件名称
Debug.Print data(UBound(data))

如果要上载多个文件(为可更有效的重用代码),那可以用Request.File来读取每一个所选的文件名称;就如以下的代码。

        '声明变量
        Dim lIndex As Integer
        
Dim lCount As Integer
        
Dim hpf As HttpPostedFile
        
Dim filename As String
        
Dim data() As String

        
Try
            
'读取所有要上载文件的数目
            lCount = Request.Files.Count

            
'读取每一个上载文件的资料
            For lIndex = 0 To lCount - 1
                
'读取第N个上载文件的资料
                hpf = Request.Files(lIndex)

                
'检查所选文件大小
                If hpf.ContentLength = 0 Then
                    
'显示所选文件资料
                    Label2.Text = Label2.Text & "<br>" & "文件大小:" & hpf.ContentLength & " bytes<br>"
                    Label2.Text = Label2.Text & "文件类型:" & hpf.ContentType & "<br>"
                    Label2.Text = Label2.Text & "文件名称:" & hpf.FileName & "<br>"

                    '读取文件名称
                    data = Split(hpf.FileName, "\")
                    
'上载文件到服务器
                    PostFileName.PostedFile.SaveAs(Server.MapPath("."& "\" & data(UBound(data)))

                    
'显示上载结果
                    With Label3
                        .Text 
= "上载成功!"
                        .ForeColor = Color.DarkGreen
                    
End With
                
End If

                
'释放资源
                hpf = Nothing
            
Next
        
Catch ex As Exception
            
'显示错误讯息
            With Label3
                .Text 
= "Error: " & ex.Message
                .ForeColor 
= Color.Red
            
End With
        
End Try
posted @ 2005-05-19 09:18  海南K.K  阅读(940)  评论(2编辑  收藏  举报