2011-04-28 131 views
2

我有一個FileUpload的問題,當我從本地機器上選擇一個文件時,它不會帶來真正的文件路徑,它會使用工程文件的路徑和假設我選擇的文件存在,有什麼想法?ASP.NET/VB.NET FileUpload控件

例如: 文件名是「Q.JPG」,並在「C:\」 當我瀏覽到「C:\」,然後選擇「Q.JPG」,並點擊打開,我得到以下錯誤 找不到文件'C:\ Program Files \ Microsoft Visual Studio 8 \ Common7 \ IDE \ q.jpg'。 所以,當我火了代碼的文件上傳到FTP爲例,它會因爲文件不存在返回錯誤

HTML端:

<asp:FileUpload ID="FU" runat="server" Height="24px" /> 

下面是VB代碼:

Protected Sub btnUpload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpload.Click 

    If FU.PostedFile IsNot Nothing AndAlso FU.PostedFile.FileName <> "" Then 
     Dim MaxSize As Integer = FU.PostedFile.ContentLength 
     If MaxSize > "2097152" Then 
      lblUpload.Text = "The file size cannot exceed 2 MB" 
      btnSave.Focus() 
      GoTo 99 
     End If 


     '-------------------------- 
     ' set up request... 
     Dim LocFile As String = FU.PostedFile.FileName 
     Dim clsRequest As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("ftp://myftp.com/" & LocFile), System.Net.FtpWebRequest) 
     clsRequest.Credentials = New System.Net.NetworkCredential("username", "password") 
     clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile 

     ' read in file... 
     Dim bFile() As Byte = System.IO.File.ReadAllBytes(FU.PostedFile.FileName) 

     ' upload file... 
     Dim clsStream As System.IO.Stream = clsRequest.GetRequestStream() 
     clsStream.Write(bFile, 0, bFile.Length) 
     clsStream.Close() 
     clsStream.Dispose() 
     '-------------------------- 


     lblUpload.Text = "Uploaded" 
     btnSave.Focus() 
    Else 
     lblUpload.Text = "Choose a file to upload" 
     btnSave.Focus() 
    End If 

99:「什麼都不做

End Sub 
+0

聽起來像客戶端(即您的瀏覽器)的問題,而不是在服務器端。 – 2011-04-28 13:45:50

+0

您可以發佈您的FileUploader標記,Open按鈕和事件處理程序以處理與這些控件相關的任何事件嗎? – pseudocoder 2011-04-28 13:48:32

+0

http://msdn.microsoft.com/en-us/library/aa479405.aspx – asawyer 2011-04-28 13:49:50

回答

4

問題是你想將PostedFile作爲本地文件(在Web服務器上)讀取,而不是從連接到FileUploader的HttpPostedFile對象讀取。

嘗試:

Dim objFileStream As System.IO.Stream = FU.PostedFile.InputStream 
Dim bFile(objFileStream.Length) As Byte 
objFileStream.Read(bFile, 0, objFileStream.Length) 
0

我試過的東西,和它的工作..

  FU.SaveAs("C:\" & FU.FileName) 

      '-------------------------- 
      ' set up request... 

      Dim LocFile As String = FU.PostedFile.FileName 
      Dim clsRequest As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("MyFTP.com" & LocFile), System.Net.FtpWebRequest) 

      clsRequest.Credentials = New System.Net.NetworkCredential("username", "password") 
      clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile 

它的工作..只是免於FU(文件上傳)的文件到C:\,然後設置地址總是從C開始:\

+0

是的,這會起作用,但是你沒有達到不必使用服務器磁盤的目標。如果你能接受關於這個問題的答案,那將是很好的。 – pseudocoder 2011-04-29 16:46:01