使用内置的 Windows FTP 客户端继续上传

Vla*_*sky 1 windows ftp

在 FTP 客户端失败/从前一点断开连接后,是否可以使用内置的 Windows FTP 客户端恢复上传?

例如,如何实现以下场景:内置 FTP 客户端上传 40% 的文件,连接丢失,客户端重新连接并开始上传其余 60% 的文件?其他 FTP 客户端能够执行此操作,但我仅限于仅使用 Windows 安装后可用的软件。

Mar*_*ryl 5

不,Windows 命令行ftp.exe不支持传输恢复。


但是您可以自动下载任何支持自动恢复的小型 3rd 方便携式命令行 FTP 客户端并使用它。

例如,以下 PowerShell 代码下载WinSCP .NET 程序集包,将其解压缩并开始可恢复上传:

$winscp_assembly = "WinSCPnet.dll"
if (Test-Path $winscp_assembly)
{
    Write-Host "WinSCP already downloaded"
}
else
{
    $webclient = New-Object System.Net.WebClient
    $winscp_version = "5.19.2"
    $winscp_archive = "WinSCP-$winscp_version-Automation.zip"
    Write-Host "Downloading $winscp_archive ..."
    $url =
        "https://sourceforge.net/projects/winscp/files/WinSCP/" +
        $winscp_version + "/" + $winscp_archive + "/download"
    $webclient.DownloadFile($url, $winscp_archive)
    Write-Host "Done"

    Write-Host "Extracting $winscp_archive ..."
    $shell = New-Object -ComObject Shell.Application    

    $current_path = [string](Resolve-Path ".")
    $winscp_archive_path = [string](Resolve-Path $winscp_archive)
    $winscp_archive_folder = $shell.NameSpace($winscp_archive_path)
    $current_folder = $shell.NameSpace($current_path)
    # SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL
    $copy_options = 4 -bor 16
    $current_folder.CopyHere($winscp_archive_folder.Items(), $copy_options)
    Write-Host "Done"
}

Add-Type -Path $winscp_assembly

$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()
Run Code Online (Sandbox Code Playgroud)

要运行 PowerShell 脚本 ( upload.ps1),请使用:

powershell.exe -File upload.ps1 -ExecutionPolicy Bypass
Run Code Online (Sandbox Code Playgroud)

(我是 WinSCP 的作者)


另一种选择是使用FtpWebRequest.

请参阅如何在互联网中断后继续或恢复 FTP 上传

您可以再次使用FtpWebRequest来自 PowerShell 脚本的 。请参阅使用 PowerShell 通过 FTP 上传文件