2011-03-17 2 views
0

여기 내 고민하는 문제가 있습니다. 하나의 FTP (Dev 사이트)에서 다른 FTP (테스트 사이트)로 이동 중입니다. 이 과정을 바꿀 생각을하지 마십시오. 그것은 내 손에서 벗어났다. 어떤 경우 든 내 방법은 다음과 같습니다.FTPWebRequest : 하나의 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 바이트로 나타나며 때로는 실제로 전송됩니다. 문제는 원본과 크기가 같음에도 불구하고 손상된 것처럼 행동한다는 것입니다. 누구든지 해결책이 있습니까?

+0

난 그냥 당신의 코드를 사용하여 테스트를했는데, 그것은 나를 위해 잘 작동했습니다. 나는 두 DLL을 보았는데 그것들은 동일했다. –

답변

0

출력 스트림을 닫기과 uploadRequest이 일에서 반응을 얻고 (스트림, 스트림으로하는 ByRef 출력으로 입력하는 ByRef) 귀하의 하위 정의에

공공 공유 하위 CopyStream을하는 ByRef를 사용 .

0

그냥 추측 -

+0

이렇게하면 그의 메소드가하지 않는 새로운 변수에'input'과'output'을 가리킬 수 있습니다. –

관련 문제