Рекурсивно загружать каталоги (с каталогами в них) на FTP - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно загрузить полный каталог с другими каталогами в нем на FTP с ПК с Windows.

В настоящее время я использую пакетный файл Windows для загрузки файлов на FTP:

FTP -i -s:upload.ftp

Загрузить.ftp:

open hostname
username
Password
prompt
bin
cd pathonserv/path
prompt
mput localpath/localfolder/*

Этот код загружает только файлы из локальной папки на сервере, но не из папок в локальной папке.

Я могу использовать любую рекомендацию.Я открыт для смены языка с командного файла Windows на Python.Также у меня есть возможности терминала Linux на ПК с Windows.C ++ также приветствуется, если код может выполняться без каких-либо дополнительных дополнительных загрузок.

Безопасность не очень важна.В настоящее время я предпочитаю скорость над безопасностью.Мне нужен простой скрипт для рекурсивной загрузки каталогов (с каталогами в нем) на FTP, который имеет имя пользователя и пароль.

Также Windows обязательна!Я не хотел бы иметь более 1 загружаемого плагина, но даже если он будет работать, я могу его взять.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Это будет решение Autoit.

;ftp- Upload

#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <FTPEx.au3>

$initialPath = 'c:\Users\xxx\Downloads\'

$fileStructure = _FileListToArrayRec($initialPath, '*', $FLTAR_FILESFOLDERS, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
;~ _ArrayDisplay($fileStructure)

_Example()

Func _Example()
    Local $sServer = '192.168.178.XXX'
    Local $sUsername = 'admin'
    Local $sPass = 'xxx'
    Local $Err, $sFTP_Message

    Local $hOpen = _FTP_Open('MyFTP Control')
    Local $hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass, 0, 21, $INTERNET_SERVICE_FTP, $INTERNET_FLAG_PASSIVE)
    If @error Then
        MsgBox($MB_SYSTEMMODAL, '_FTP_Connect', 'ERROR=' & @error)
    Else
        _FTP_GetLastResponseInfo($Err, $sFTP_Message)
        ConsoleWrite('$Err=' & $Err & '   $sFTP_Message:' & @CRLF & $sFTP_Message & @CRLF)
        ; do something ...
        _FTP_DirSetCurrent($hConn, '/ALL')
        _FTP_DirPutContents($hConn, $initialPath, '/ALL', 1)
        Sleep(100)
        _FTP_DirSetCurrent($hConn, '/ALL')
        Local $aFile = _FTP_ListToArray($hConn, 0)
        _ArrayDisplay($aFile)
    EndIf
    Local $iFtpc = _FTP_Close($hConn)
    Local $iFtpo = _FTP_Close($hOpen)
EndFunc   ;==>_Example
0 голосов
/ 22 февраля 2019

Просто используйте любой другой FTP-клиент для командной строки Windows.Большинство поддерживает рекурсивные передачи.

Например, с WinSCP FTP-клиентом , вы можете использовать следующий пакетный файл:

winscp.com /ini=nul /log=upload.log /command ^
    "open ftp://username:password@hostname/" ^
    "put C:\localpath\localfolder\* /pathonserv/path/" ^
    "exit"

WinSCP GUI может даже генерироватьшаблон командного файла для вас .

Также есть руководство по преобразованию Windows FTP-скрипта в WinSCP (не то, что это действительно нужно в этом тривиальном случае).

(я автор WinSCP)


Если вы хотите использовать Python, отметьте Загрузка папок из локальной системы на FTP с использованием скрипта Python (игнорируйте принятый ответ @monkut, ответ @ Edgard и некоторые другие лучше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...