Что нового

Загрузка на FTP средствами АutoIT

Nassz

Новичок
Сообщения
9
Репутация
0
подскажите пожалуйста как с помощью АвтоИТ залить файлы на ФТП с паролем ?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: Загрузка на ФТП средствами АвтоИТ

*click*
 
Автор
N

Nassz

Новичок
Сообщения
9
Репутация
0
Re: Загрузка на ФТП средствами АвтоИТ

спасибо
но чего то ничего не происходит ддлку зарегестрировал , в скрипт подствил значения но на фтп ничего не появляется !!!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: Загрузка на ФТП средствами АвтоИТ

Yashied
Может ты выложешь свою версию на FTP.au3?
Я хотел было выложить эту библиотеку, но тут случайно наткнулся на твою версию, и подумал что ты сам захочешь её выложить :smile: Всё таки там ближе к нативным средствам, не нужно использовать посторонние модули (кажется).

P.S
Хотя она(?) уже добавлена в последних бетках, но всё же до релиза пусть поваляется тут :smile:
 
Автор
N

Nassz

Новичок
Сообщения
9
Репутация
0
Re: Загрузка на ФТП средствами АвтоИТ

после изучения FTP.au3 файл залился на фтп а можно как то вызвать Прогресс заливки ? а то видно только по иконке в трее :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: Загрузка на ФТП средствами АвтоИТ

Не так просто, как кажется на первый взгляд. Единственный способ - заливать по частям и после каждой части отображать в GUI прогресс...

Еще не отбил желание?

Тогда еще ложка дегтя... AutoIt не поддерживает многопоточность, поэтому на время заливки файла (части) на FTP твой GUI будет парализован, полностью. Единственный выход здесь, это написать "заливщик" в отдельном скрипте, который будет поставлять информацию о ходе закачки в основной скрипт каким-нибудь способом (это не проблема). Но вот комплексная реализация такой задачи не из простых решений. Я позже выложу свой FTP Uploader, который как раз работает по этому принципу.

;)




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

И поправь пожалуйста название темы, замени АвтоИТ на AutoIt и ФТП на FTP. А то звучит как издевательство...

См. "Общие правила конференции".

:ninja:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: Загрузка на ФТП средствами АвтоИТ

Yashied [?]
Единственный способ - заливать по частям и после каждой части отображать в GUI прогресс...
А разве там не поддерживается указание Callback-функций?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Поддерживается, но это не избавит от "зависания" скрипта.

Код:
#Include <FTP.au3>

Const $Host = ''
Const $Login = ''
Const $Password = ''

Const $LocalFile = 'C:\WINDOWS\Notepad.exe'
Const $RemoteFile = 'Notepad.exe'

Const $INTERNET_STATUS_REQUEST_SENT = 31

Global $hFtp, $hSession, $Bytes = -32

ProgressOn('Uploading...', $LocalFile, '', -1, -1, 2)

_FTP_Startup()
$hFtp = _FTP_Open('MyFtp')

$tData = DllStructCreate('dword')
DllStructSetData($tData, 1, FileGetSize($LocalFile))
$hProc = DllCallbackRegister('_InternetStatus', 'none', 'ptr;ptr;dword;ptr;dword')
DllCall($WININET_DLL, 'ptr', 'InternetSetStatusCallback', 'ptr', $hFtp, 'ptr', DllCallbackGetPtr($hProc))

$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)
_FTP_PutFile($hSession, $LocalFile, $RemoteFile, 0, DllStructGetPtr($tData))
If @error Then
	MsgBox(16, 'Error', ':(')
EndIf
_FTP_Disconnect($hSession)

DllCall($WININET_DLL, 'ptr', 'InternetSetStatusCallback', 'ptr', $hFtp, 'ptr', 0)
DllCallbackFree($hProc)

_FTP_Close($hFtp)
_FTP_Shutdown()

ProgressOff()

Func _InternetStatus($hSession, $hContext, $iStatus, $hInformation, $iLenght)
	Switch $iStatus
		Case $INTERNET_STATUS_REQUEST_SENT

			Local $tFull = DllStructCreate('dword', $hContext)
			Local $tSize = DllStructCreate('dword', $hInformation)

			$Bytes += DllStructGetData($tSize, 1)
			If $Bytes > 0 Then
				ProgressSet($Bytes / DllStructGetData($tFull, 1) * 100)
			EndIf
	EndSwitch
EndFunc   ;==>_InternetStatus


FTP.au3


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

Если загружать частями, то GUI хоть как-то будет реагировать...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
Поддерживается, но это не избавит от "зависания" скрипта.
по моему тут не в этом проблема, прогресс реагирует если не использовать данные с callback'а, вот обычная имитация проресса срабатывает:

Код:
Func _InternetStatus($hSession, $hContext, $iStatus, $hInformation, $iLenght)
	If Not IsDeclared("iProgress") Then Assign("iProgress", 0, 2)
	Assign("iProgress", Eval("iProgress")+5)
	ProgressSet(Eval("iProgress"))
	If Eval("iProgress") > 100 Then Assign("iProgress", 0)
EndFunc


значит видимо проблема в получений данных callback'а...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Для того, чтобы этот пример работал как полагается, необходимо вызывать функцию _FTP_PutFile() (а еще лучше и callback функцию) в отдельном потоке, что не реально.
 

arfey

Новичок
Сообщения
25
Репутация
2
Подскажите как залить папку, которая содержит подкаталоги и файлы, соответственно таким образом, что бы на ftp-сервере папка сохранилась с первичной структурой.

Так же хочу отметить, что имена заливаемых файлов и папок мне не известны. Т.е. наверное потребуется генерироваться список структуры каталога.
 
Верх