使用内置 Windows FTP 客户端恢复上传

使用内置 Windows FTP 客户端恢复上传

当 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-Archivecmdlet。如果您需要使用旧版本的 PowerShell,请查看此答案的旧版本,以获取使用Shell.Application对象的解决方案。

(我是 WinSCP 的作者)


另一种选择是使用以下方式手动实现简历FtpWebRequest

网络中断后如何继续或恢复 FTP 上传

您也可以使用FtpWebRequestPowerShell 脚本。请参阅使用 PowerShell 通过 FTP 上传文件

相关内容