Retomar o upload com o cliente FTP interno do Windows

0

É possível retomar o upload com o cliente FTP interno do Windows após a falha / desconexão do cliente FTP do ponto anterior?

Por exemplo, como alcançar o seguinte cenário: cliente FTP incorporado carrega 40% do arquivo, a conexão foi perdida, o cliente se reconecta e começa a carregar o restante de 60% do arquivo? Outros clientes FTP capazes de fazer isso, mas eu restringi usando apenas o software disponível logo após a instalação do Windows.

    
por Kaponir 26.03.2017 / 07:25

1 resposta

3

Não, a linha de comando do Windows ftp.exe não suporta a retomada de transferência.

Mas você pode baixar automaticamente qualquer cliente FTP de linha de comando portátil de terceiros que suporte a retomada e uso automáticos.

Por exemplo, o seguinte código do PowerShell faz o download do pacote WinSCP .NET assembly , o extrai e inicia um upload recuperável:

$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.4"
    $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()

Para executar o script do PowerShell ( upload.ps1 ) use:

powershell.exe -File upload.ps1 -ExecutionPolicy Bypass

(eu sou o autor do WinSCP)

Outra opção é implementar o currículo manualmente usando FtpWebRequest .

Veja Como continuar ou continuar o upload do FTP após a interrupção da Internet .

Novamente, você pode usar o FtpWebRequest de um script do PowerShell. Consulte Carregar arquivos com FTP usando o PowerShell .

    
por 26.03.2017 / 09:18

Tags