Файлы нулевого размера, загруженные с помощью FTP FileUpload

Недавно я читал кучу статей о загрузке по FTP в ASP.NET, и все они, кажется, имеют смысл, но каждый раз, когда я пытался их реализовать, я либо загружал пустой файл, либо его вообще не было. Вот некоторые из статей, которые я читал:

Управление FTP-передачей с веб-страницы ASP.NET Джон ПетерсонЭлемент управления FileUpload не дает полный путь… .HELP !!!!Как загрузить файлы с помощью элемента управления веб-сервера FileUpload

Все они отличные статьи, но, как я уже сказал, возникают проблемы :(

Я точно знаю, в чем проблема, но я не знаю, как ее исправить. Я могу передать имя файла из элемента управления FileUpload, но путь не существует из соображений безопасности. Однако объект StreamReader требует загрузки полного пути к файлу, так как, черт возьми, я это получу? Я в своем уме! >. <

Давайте использовать пример Джона Петерсона, который я связал выше. Вот код:

Protected Sub btnUploadFile_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim myFtpWebRequest As FtpWebRequest
    Dim myFtpWebResponse As FtpWebResponse
    Dim myStreamWriter As StreamWriter

    myFtpWebRequest = WebRequest.Create("ftp://ftp_server_name/filename.ext")
    myFtpWebRequest.Method = WebRequestMethods.Ftp.UploadFile
    myFtpWebRequest.UseBinary = True

    myStreamWriter = New StreamWriter(myFtpWebRequest.GetRequestStream())

    'IT BREAKS HERE BECAUSE THE CLIENT PATH IS WRONG!!
    myStreamWriter.Write(New StreamReader(Server.MapPath("filename.ext")).ReadToEnd)
    myStreamWriter.Close()

    myFtpWebResponse = myFtpWebRequest.GetResponse()
    myFtpWebResponse.Close()
End Sub

Видеть? Нет данных в загруженном файле :(

Теперь моя последняя реализация выглядит следующим образом, но загруженный файл намного больше исходного и поврежден. Серьезно, какого чёрта я делаю не так? Я был два долгих дня в этом, Grrr ...

Protected Sub btnUploadFile2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim myFtpWebRequest As FtpWebRequest
    Dim myFtpWebResponse As FtpWebResponse

    filename = Path.GetFileName(FileUpload1.FileName)

    myFtpWebRequest = CType(WebRequest.Create(ftpServer + ftpPath + filename), FtpWebRequest)
    myFtpWebRequest.Method = WebRequestMethods.Ftp.UploadFile
    myFtpWebRequest.UseBinary = True

    'NEW APPROACH USING THE STREAM OF THE FILE FROM THE FileUpload Control
    'CORRECT BYTE LENGTH - in sourceStream.BaseStream
    Dim sourceStream As New StreamReader(FileUpload1.FileContent)
    'WRONG BYTE LENGTH - in sourceStream.ReadToEnd()
    Dim fileContents As Byte() = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd())
    sourceStream.Close()
    myFtpWebRequest.ContentLength = fileContents.Length

    Dim requestStream As Stream = myFtpWebRequest.GetRequestStream()
    requestStream.Write(fileContents, 0, fileContents.Length)
    requestStream.Close()

    myFtpWebResponse = CType(myFtpWebRequest.GetResponse(), FtpWebResponse)
    myFtpWebResponse.Close()
End Sub

Большое спасибо Адаму Марасу за удивительный ответ. Я оставлю здесь свои промахи для других, кто найдет эту ветку;)

Ответы на вопрос(3)

Ваш ответ на вопрос