FTPWebRequest: перенос с одного FTP на другой FTP, файл назначения поврежден - PullRequest
0 голосов
/ 17 марта 2011

Вот моя мучительная проблема. Я перехожу с одного FTP (сайт разработчика) на другой FTP (тестовый сайт). Избавьте меня от мыслей об изменении этого процесса. Это из моих рук. В любом случае, вот мой метод:

Public Function TransferFile(originalFile As String, destinationFile As String) As String
        Try
            'FileStream for holding the file
            Dim uploadRequest As FtpWebRequest = WebRequest.Create(destinationFile)
            uploadRequest.Method = WebRequestMethods.Ftp.UploadFile
            uploadRequest.Credentials = New NetworkCredential(ftp_user, ftp_pw)
            uploadRequest.UseBinary = True
            uploadRequest.UsePassive = False

            'connect to the server
            Dim fileRequest As FtpWebRequest = WebRequest.Create(originalFile)
            fileRequest.Method = WebRequestMethods.Ftp.DownloadFile
            fileRequest.Credentials = New NetworkCredential(ftp_user, ftp_pw)
            fileRequest.UseBinary = True
            fileRequest.UsePassive = False

            'get the servers response
            Dim response As WebResponse = fileRequest.GetResponse()

            'retrieve the response stream
            Dim stream As Stream = response.GetResponseStream()
            CopyStream(stream, uploadRequest.GetRequestStream)

            stream.Close()
            response.Close()

            Return "File transfered"
        Catch ex As System.Security.SecurityException
            Return ex.Message
        Catch ex As Exception
            Return ex.Message
        End Try
    End Function

    Public Shared Sub CopyStream(input As Stream, output As Stream)
      Dim buffer As Byte() = New Byte(32767) {}
       While True
        Dim read As Integer = input.Read(buffer, 0, buffer.Length)
        If read <= 0 Then
            Return
        End If
        output.Write(buffer, 0, read)
       End While
    End Sub

Это прекрасно работает для файлов ASPX и их кода .vb. Когда мы пытаемся передать файлы .DLL, они отображаются на сервере в виде 0 байтов, а иногда и фактически передаются. Проблема в том, что, несмотря на то, что они того же размера, что и оригинал, они действуют так, как будто они испорчены. У кого-нибудь есть решение?

Ответы [ 2 ]

0 голосов
/ 18 марта 2011

Закрытие потока вывода и получение ответа от uploadRequest сработало.

0 голосов
/ 18 марта 2011

Просто предположение - используйте BYREF в вашем подопределении

Public Shared Sub CopyStream (ввод BYREF в виде потока, вывод BYREF в виде потока)

...