FTP загрузка нескольких больших файлов в один файл - PullRequest
1 голос
/ 09 мая 2011

Я пытаюсь загрузить 2 больших файла на ftp-сервер, загрузив один файл в определенное место. У меня это работает, если файлы маленькие, но он вылетает с большими файлами.

For i As Integer = 0 To filelist.Count() - 1

        Dim fRequest As FtpWebRequest = WebRequest.Create(ftpPath & "/Reports/" & filelist.Item(i))
        fRequest.Credentials = New NetworkCredential(username, psswd)
        fRequest.KeepAlive = False
        fRequest.Proxy = Nothing
        fRequest.UsePassive = True
        fRequest.UseBinary = True
        fRequest.Method = WebRequestMethods.Ftp.DownloadFile
        fRequest.Timeout = 30000

        Try
            ' read in file...

            ' upload file...
            Dim fresponse As FtpWebResponse = DirectCast(fRequest.GetResponse(), FtpWebResponse)
            Dim fstream As FileStream = fileobj.OpenRead()
            Dim sStream As Stream = fRequest.GetRequestStream()

            Dim reader As New StreamReader(fstream)
            swriter.WriteLine(reader.ReadToEnd)
            swriter.Flush()
            fstream.Close()
            fRequest.Abort()



        Catch ex As Exception
            appLogs.constructLog(ex.Message.ToString & " @ ", True, True)
            errorReporting(ex.Message.ToString & fileItem)
        End Try
    Next

    swriter.Close()
    swriter.Dispose()

Ответы [ 2 ]

1 голос
/ 17 декабря 2012

Ниже на самом деле работает, и я, наконец, могу загрузить 10gb + файлы

            Dim bytesread As Byte = 0
            Dim buffer As Integer = 2
            Dim fRequest As FtpWebRequest = WebRequest.Create(UPloaddir & "/" & filenameup & ".bak")
            ' fRequest.Credentials = New NetworkCredential(username, psswd)
            fRequest.KeepAlive = False
            fRequest.Proxy = Nothing
            fRequest.UsePassive = True
            fRequest.UseBinary = False
            fRequest.Method = WebRequestMethods.Ftp.UploadFile
            fRequest.Timeout = 180000

            '   Try
            ' read in file...
            Dim fs As FileStream = File.OpenRead(folder & "\" & fi.Name)
            Dim bFile As Byte() = New Byte(1) {}
            Dim fstream As Stream = fRequest.GetRequestStream
            ' upload file...
            Do
                bytesread = fs.Read(bFile, 0, buffer)
                fstream.Write(bFile, 0, bFile.Length)
            Loop Until bytesread = 0
            fstream.Close()
            fstream.Dispose()
0 голосов
/ 11 мая 2011
   Dim filename As String = fileobj.Name
    Dim bytesread As Integer = 0
    Dim buffer As Integer = 8100

    Dim fRequest As FtpWebRequest = WebRequest.Create(ftpPath & "/Logs/" & filename)
    fRequest.Credentials = New NetworkCredential(username, psswd)
    fRequest.KeepAlive = False
    fRequest.Proxy = Nothing
    fRequest.UsePassive = True
    fRequest.UseBinary = False
    fRequest.Method = WebRequestMethods.Ftp.UploadFile
    fRequest.Timeout = 180000

    Try
        ' read in file...
        'Dim reader As New StreamReader(fileItem)
        Dim fs As FileStream = File.OpenRead(fileItem)
        Dim bFile As Byte() = New Byte(8100) {}
        Dim fstream As Stream = fRequest.GetRequestStream
        ' upload file...
        Do
            bytesread = fs.Read(bFile, 0, buffer)
            fs.Read(bFile, 0, buffer)
            fstream.Write(bFile, 0, bFile.Length)
        Loop Until bytesread = 0
        fstream.Close()
        fstream.Dispose()

    Catch ex As Exception
        appLogs.constructLog(ex.Message.ToString & " @ ", True, True)
        errorReporting(ex.Message.ToString & fileItem)
    End Try

загружено записью кусками.

...