Можно ли возобновить загрузку с помощью встроенного FTP-клиента Windows после сбоя / отключения FTP-клиента с предыдущего пункта?

Например, как добиться следующего сценария: встроенный FTP-клиент загружает 40% файла, соединение потеряно, клиент повторно подключается и начинает загрузку оставшихся 60% файла? Другие FTP-клиенты способны сделать это, но я ограничился использованием только программного обеспечения, доступного сразу после установки Windows.

1 ответ1

3

Нет, командная строка Windows ftp.exe не поддерживает возобновление передачи.


Но вы можете просто автоматически загрузить любой небольшой сторонний портативный 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.13.8"
    $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)
    $copy_options = 4 -bor 16 # SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL
    $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()

Для запуска скрипта PowerShell (upload.ps1) используйте:

powershell.exe -File upload.ps1 -ExecutionPolicy Bypass

(Я автор WinSCP)


Другой вариант - реализовать резюме вручную, используя FtpWebRequest.

См. Как продолжить или возобновить загрузку по FTP после прерывания интернета.

Опять же, вы можете использовать FtpWebRequest из скрипта PowerShell. См. Загрузка файлов по FTP с помощью PowerShell.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .