Что нового

[Сеть, интернет] Загрузить папку с FTP

soulmonger

Новичок
Сообщения
11
Репутация
0
Привет! Подскажите, пожалуйста, как загрузить все содержимое директории FTP. Спасибо.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Разом - никак. Каждый файл нужно загружать отдельно.
 
Автор
S

soulmonger

Новичок
Сообщения
11
Репутация
0
Ок. А каким образом можно скачать по отдельности все файлы, находящиеся в директории? При условии что нельзя привязаться к именам файлов. Содержимое директории часто меняется и необходимо иметь свежую ее копию на локальном диске.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
soulmonger
Если это не закрытая папка, то можно получить код страницы с помощью, например, _INetGetSource, выдрать из кода ссылки и скачать как здесь у CreatoR'а.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
так получаешь массив имен.
Код:
_FTP_ListToArray

потом в цикле поэлементно скачиваешь. ну или связка
Код:
_FTP_FindFileFirst 
_FTP_FindFileNext
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Код:
#Include <FTPEx.au3>

Global Const $Host = 'ftp.mozilla.org'
Global Const $Login = ''
Global Const $Password = ''

Global $hFtp, $hSession, $aFind, $hFind

$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)
$aFind = _FTP_FindFileFirst($hSession, '', $hFind)
While Not @error
	ConsoleWrite($aFind[10])
	If BitAND($aFind[1], $FILE_ATTRIBUTE_DIRECTORY) Then
		ConsoleWrite(' (Directory)')
	EndIf
	ConsoleWrite(@CR)
	$aFind = _FTP_FindFileNext($hFind)
WEnd
_FTP_FindFileClose($hFind)
_FTP_Close($hFtp)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Yashied
У меня Ваш код почему-то не работает с ftp.filekeeper.org. :(
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
madmasles сказал(а):
У меня Ваш код почему-то не работает с ftp.filekeeper.org.
Я не могу проверить с ftp.filekeeper.org, т.к. нет логина и пароля к нему, но со всеми остальными, тестируемыми мной FTP, этот код прекрасно работает, да и нет тут ничего такого необычного, все из справки.

Вот более продвинутая загрузка с учетом всех вложенных папок и их подпапок (только что написал). Работоспособность зависит от количества одновременно разрешенных соединений с одного IP для данного FTP сервера, ну и еще от чего-нибудь...

:smile:

Код:
#Include <FTPEx.au3>

Global Const $Host = 'ftp.mozilla.org'
Global Const $Login = ''
Global Const $Password = ''

_FTP_Download('', @ScriptDir & '\Uploaded')

Func _FTP_Download($sRemotePath, $sLocalPath)

	Local $hFtp, $hSession, $aFind, $hFind, $Path, $Result = 1

	DirCreate($sLocalPath)
	If (Not FileExists($sLocalPath)) Or (Not StringInStr(FileGetAttrib($sLocalPath), 'D')) Then
		Return 0
	EndIf
	$hFtp = _FTP_Open('MyFtp')
	$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)
	$aFind = _FTP_FindFileFirst($hSession, $sRemotePath, $hFind)
	While Not @error
		$Path = $sLocalPath & '\' & $aFind[10]
		If BitAND($aFind[1], $FILE_ATTRIBUTE_DIRECTORY) Then
			DirCreate($Path)
			If (Not FileExists($Path)) Or (Not StringInStr(FileGetAttrib($Path), 'D')) Then
				Return 0
			EndIf
			If Not _FTP_Download($sRemotePath & '/' & $aFind[10], $Path) Then
				Return 0
			EndIf
		Else
			ConsoleWrite($sLocalPath & '\' & $aFind[10] & @CR)
;			If Not _FTP_FileGet($hSession, $sRemotePath & '/' & $aFind[10], $Path) Then
;				$Result = 0
;			EndIf
		EndIf
		$aFind = _FTP_FindFileNext($hFind)
	WEnd
	_FTP_FindFileClose($hFind)
	_FTP_Close($hFtp)
	Return $Result
EndFunc   ;==>_FTP_Download
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Yashied
Все равно с ftp.filekeeper.org не работает. При этом через http все прекрасно скачивается. Может у ftp.filekeeper.org какие-то специфические условия. Я уже с примерами из справки третий день мучаюсь. Единственное, что у меня получилось это удалять файлы. Если хотите попробовать, я пришлю Вам логин и пароль.
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
madmasles
Может всё дело в Passive и Active Mode?


Добавлено:
Сообщение автоматически объединено:

Код:
$hSession  = _FTP_Connect($hFtp, $Host, $Login, $Password, "1")
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Garrett
Огромное Вам спасибо! Теперь заработало! Наконец!!! :beer: :IL_AutoIt_1:
 
Автор
S

soulmonger

Новичок
Сообщения
11
Репутация
0
Огромное спасибо всем ответившим, в особенности Yashied за его код. Все работает. Отличный форум :beer:
 
Верх