1

以下のコードを考慮してください。小さいファイル (50 MB 未満) では非常にうまく機能しますが、100 MB 以上のファイルではクラッシュしました。次のエラーが発生します。

「トランスポート接続にデータを書き込めません: システムに十分なバッファ領域がなかったか、キューがいっぱいだったため、ソケットに対する操作を実行できませんでした。」

'Method
Private Sub Upload(ByVal source As String, ByVal target As String, ByVal credential As NetworkCredential)
    Dim request As FtpWebRequest = DirectCast(WebRequest.Create(target), FtpWebRequest)
    request.Method = WebRequestMethods.Ftp.UploadFile
    request.Credentials = credential
    request.Proxy = Nothing
    Dim reader As New FileStream(source, FileMode.Open)
    Dim buffer(Convert.ToInt32(reader.Length - 1)) As Byte
    reader.Read(buffer, 0, buffer.Length)
    reader.Close()
    request.ContentLength = buffer.Length
    Dim stream As Stream = request.GetRequestStream
    stream.Write(buffer, 0, buffer.Length)
    stream.Close()
    Dim response As FtpWebResponse = DirectCast(request.GetResponse, FtpWebResponse)
    response.Close()
End Sub

'Calling Function
Dim credential As New NetworkCredential("FTPUserName", "FTPPassword")

Upload(FileName.Zip, "ftp://abc.com/Location/FileName.Zip", credential)

私が欠けているものを教えてください。

4

1 に答える 1

1

このスクリプトを使用してください。うまく機能し、200 GB 以上のファイルでテストしました。

Private Sub Upload(ByVal sourceFiles() As String)
    Dim cm As ConnectionManager = Dts.Connections.Add("FTP")
    cm.Properties("ServerName").SetValue(cm, Dts.Variables("User::FTPServerName").Value.ToString())
    cm.Properties("ServerUserName").SetValue(cm, Dts.Variables("User::FTPUserName").Value.ToString())
    cm.Properties("ServerPassword").SetValue(cm, Dts.Variables("User::FTPPassword").Value.ToString())
    cm.Properties("ServerPort").SetValue(cm, "21")
    cm.Properties("Timeout").SetValue(cm, "0")
    cm.Properties("ChunkSize").SetValue(cm, "1000")
    cm.Properties("Retries").SetValue(cm, "1")
    Dim ftp As FtpClientConnection = New FtpClientConnection(cm.AcquireConnection(Nothing))
    ftp.Connect()
    ftp.SendFiles(sourceFiles, Dts.Variables("User::FTPFolder").Value.ToString(), True, False)
    ftp.Close()
End Sub

ありがとう

于 2013-01-21T22:41:08.693 に答える