rquivos de tamanho @Zero enviados com FTP FileUpload

Eu tenho lido vários artigos sobre upload de FTP no ASP.NET recentemente e todos parecem fazer sentido, mas toda vez que tentei implementá-los, recebi um arquivo vazio ou nenhum arquivo. Aqui estão alguns dos artigos que eu tenho lido:

Gerenciando transferências de FTP de uma página da Web do ASP.NET Por John Peterson controle @FileUpload não fornece o caminho completo ... AJUDE !!!!Como: Carregar arquivos com o FileUpload Web Server Control

São ótimos artigos, mas como eu disse, com problemas:

Eu sei exatamente qual é o problema, mas não sei como corrigi-lo. Posso passar o nome do arquivo do controle FileUpload, mas o caminho não existe por questões de segurança. No entanto, o objeto StreamReader exige que o caminho completo do arquivo seja carregado, então como diabos eu recebo isso? Estou no meu juízo final! >. <

Vamos usar o exemplo de John Peterson que eu liguei acima. Aqui está o código:

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

Vejo? Nenhum dado no arquivo enviado:

Agora, minha implementação mais recente se parece com isso, mas o arquivo carregado é muito maior que a fonte e está corrompido. Sério, o que diabos estou fazendo de errado? Eu tenho dois longos dias nisso, 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

Muito obrigado a Adam Maras pela resposta incrível. Vou deixar meus erros aqui para que outros beneficiem quem encontrar esse tópico;)

questionAnswers(3)

yourAnswerToTheQuestion