0

这是我的痛苦问题。我正在从一个 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 字节,有时会实际传输。问题是,尽管它们的大小与原版相同,但它们的行为就好像它们已经损坏了。有没有人有办法解决吗?

4

2 回答 2

0

只是一个猜测 - 在你的子定义中使用 BYREF

公共共享子复制流(BYREF 输入作为流,BYREF 输出作为流)

于 2011-03-17T21:26:52.303 回答
0

关闭输出流并从uploadRequest 获得响应有效。

于 2011-03-18T17:49:26.320 回答