Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PowerBuilder) SFTP Upload Large File in PartsSee more SFTP ExamplesDemonstrates how to split a large file into N parts and then upload each part separately. This technique can be used to potentially avoid limits a SFTP server might impose on upload file size.
integer li_rc oleobject loo_Sftp string ls_Hostname integer li_Port integer li_Success string ls_Handle string ls_LocalFilePath oleobject loo_Fac integer li_BlockSize integer li_NumBlocks oleobject loo_Bd integer i // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. loo_Sftp = create oleobject // Use "Chilkat_9_5_0.SFtp" for versions of Chilkat < 10.0.0 li_rc = loo_Sftp.ConnectToNewObject("Chilkat.SFtp") if li_rc < 0 then destroy loo_Sftp MessageBox("Error","Connecting to COM object failed") return end if // Set some timeouts, in milliseconds: loo_Sftp.ConnectTimeoutMs = 5000 loo_Sftp.IdleTimeoutMs = 10000 // Connect to the SSH server. // The standard SSH port = 22 // The hostname may be a hostname or IP address. ls_Hostname = "sftp.example.com" li_Port = 22 li_Success = loo_Sftp.Connect(ls_Hostname,li_Port) if li_Success <> 1 then Write-Debug loo_Sftp.LastErrorText destroy loo_Sftp return end if // Authenticate with the SSH server. Chilkat SFTP supports // both password-based authenication as well as public-key // authentication. This example uses password authenication. li_Success = loo_Sftp.AuthenticatePw("myLogin","myPassword") if li_Success <> 1 then Write-Debug loo_Sftp.LastErrorText destroy loo_Sftp return end if // After authenticating, the SFTP subsystem must be initialized: li_Success = loo_Sftp.InitializeSftp() if li_Success <> 1 then Write-Debug loo_Sftp.LastErrorText destroy loo_Sftp return end if // Open a remote file for writing on the SSH server. // If the file already exists, it is overwritten. // (Specify "createNew" instead of "createTruncate" to // prevent overwriting existing files.) ls_Handle = loo_Sftp.OpenFile("big.zip","writeOnly","createTruncate") if loo_Sftp.LastMethodSuccess <> 1 then Write-Debug loo_Sftp.LastErrorText destroy loo_Sftp return end if // We're going to upload the local file "qa_data/zips/big.zip" (a relative local path from our current working directory) // to the SFTP server. ls_LocalFilePath = "qa_data/zips/big.zip" // Rather than uploading in one shot, we'll read the local file in chunks // and upload a chunk at a time. loo_Fac = create oleobject // Use "Chilkat_9_5_0.FileAccess" for versions of Chilkat < 10.0.0 li_rc = loo_Fac.ConnectToNewObject("Chilkat.FileAccess") li_Success = loo_Fac.OpenForRead(ls_LocalFilePath) if li_Success = 0 then loo_Sftp.CloseHandle(ls_Handle) Write-Debug loo_Fac.LastErrorText destroy loo_Sftp destroy loo_Fac return end if // If we were to split the local file into 128K chunks, how many chunks (blocks) would // we have, including the last partial block? li_BlockSize = 131072 li_NumBlocks = loo_Fac.GetNumBlocks(li_BlockSize) Write-Debug "Number of blocks = " + string(li_NumBlocks) loo_Bd = create oleobject // Use "Chilkat_9_5_0.BinData" for versions of Chilkat < 10.0.0 li_rc = loo_Bd.ConnectToNewObject("Chilkat.BinData") i = 0 do while i < li_NumBlocks // Read the Nth block, which gets appended to the bd. (which means // we must clear the contents of bd before the next iteration) li_Success = loo_Fac.ReadBlockBd(i,li_BlockSize,loo_Bd) if li_Success = 0 then loo_Sftp.CloseHandle(ls_Handle) Write-Debug loo_Fac.LastErrorText destroy loo_Sftp destroy loo_Fac destroy loo_Bd return end if // Upload this block to the open remote file. li_Success = loo_Sftp.WriteFileBd(ls_Handle,loo_Bd) if li_Success = 0 then Write-Debug loo_Sftp.LastErrorText destroy loo_Sftp destroy loo_Fac destroy loo_Bd return end if // Clear the contents for the next iteration. loo_Bd.Clear() i = i + 1 loop // Close the local file. loo_Fac.FileClose() // ----------------------------------------------------------------------------- // This is important. You must close the handle on the server. // Otherwise open handles will accumulate on the server until eventually a limit // is reached and the server will fail on a call to OpenFile. // ----------------------------------------------------------------------------- // Close the remote file handle on the server. li_Success = loo_Sftp.CloseHandle(ls_Handle) if li_Success <> 1 then Write-Debug loo_Sftp.LastErrorText destroy loo_Sftp destroy loo_Fac destroy loo_Bd return end if Write-Debug "Success." destroy loo_Sftp destroy loo_Fac destroy loo_Bd |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.