当 FTP 客户端发生故障/断开连接后,是否可以使用内置 Windows FTP 客户端从上一点恢复上传?
例如,如何实现以下场景:内置 FTP 客户端上传 40% 的文件,连接丢失,客户端重新连接并开始上传剩余 60% 的文件?其他 FTP 客户端能够做到这一点,但我被限制只能使用 Windows 安装后可用的软件。
答案1
不,Windows 命令行ftp.exe
不支持传输恢复。
但是您可以自动下载任何支持自动恢复的小型第三方便携式命令行 FTP 客户端并使用它。
例如以下 PowerShell 代码下载WinSCP .NET 程序集包,提取它并开始可恢复上传:
$winscpAssembly = "WinSCPnet.dll"
if (Test-Path $winscpAssembly)
{
Write-Host "WinSCP already downloaded"
}
else
{
$bestReleaseUrl = "https://sourceforge.net/projects/winscp/best_release.json"
$winscpBestRelease = Invoke-WebRequest $bestReleaseUrl | ConvertFrom-Json
$url = $winscpBestRelease.release.url
$url = $url -replace "-Setup.exe", "-Automation.zip"
Write-Host "Downloading ..."
$winscpArchive = "WinSCP-Automation.zip"
$webclient = New-Object System.Net.WebClient
$webclient.DownloadFile($url, $winscpArchive)
Write-Host "Done"
Write-Host "Extracting $winscpArchive ..."
Expand-Archive $winscpArchive .
Write-Host "Done"
}
Add-Type -Path $winscpAssembly
$ftp_host = "ftp.example.com"
$ftp_path = "/target/path/"
$upload_path = "C:\big\file.dat"
Write-Host "Starting resumable upload of $upload_path to $ftp_host ..."
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Ftp
HostName = $ftp_host
UserName = "username"
Password = "password"
}
$session = New-Object WinSCP.Session
$session.Open($sessionOptions)
$session.PutFiles($upload_path, $ftp_path).Check()
要运行 PowerShell 脚本(upload.ps1
),请使用:
powershell.exe -File upload.ps1 -ExecutionPolicy Bypass
该脚本使用 PowerShell 5 Expand-Archive
cmdlet。如果您需要使用旧版本的 PowerShell,请查看此答案的旧版本,以获取使用Shell.Application
对象的解决方案。
(我是 WinSCP 的作者)
另一种选择是使用以下方式手动实现简历FtpWebRequest
。
您也可以使用FtpWebRequest
PowerShell 脚本。请参阅使用 PowerShell 通过 FTP 上传文件。