Что нового

[Окна, Диалоги] Загрузка файла на FTP с рандомным названием

Roman89

Новичок
Сообщения
107
Репутация
3
Всем доброго времени суток!
У меня тут созрел вопрос:
Как залить указаную картинку на FTP с рандомным названием и что бы формат изображения не менялся?
Код:
#include <FTPEx.au3>
$message = "Hold down Ctrl or Shift to choose multiple files."
$var = FileOpenDialog($message, @WindowsDir & "\", "Images (*.*)", 1 + 4 )
If @error Then
    MsgBox(4096,"","No File(s) chosen")
Else
    $var = StringReplace($var, "|", @CRLF)
    MsgBox(4096,"","You chose " & $var)
EndIf

$server = '****'
$username = '*****'
$pass = '******'

$Open = _FTP_Open('MyFTP Control')
$Conn = _FTP_Connect($Open, $server, $username, $pass, 1)
_FTP_FilePut($Conn, $var, "1.png")

$Ftpc = _FTP_Close($Open)


Заранее всем большое спасибо за ответы!
 

sss

Продвинутый
Сообщения
332
Репутация
96
Не идеал, но работает (вместо отправки подставлял MsgBox с путем):
Код:
#include <FTPEx.au3>
$message = "Hold down Ctrl or Shift to choose multiple files."
$var = FileOpenDialog($message, @WindowsDir & "\", "Images (*.*)", 1 + 4 )
If @error Then
    MsgBox(4096,"","No File(s) chosen")
	Exit
Else
	$var_old=$var
    $var = StringReplace($var, "|", @CRLF)
    MsgBox(4096,"","You chose " & $var)
EndIf
$check=StringInStr($var_old,'|')
if $check<>0 Then
	$split=StringSplit($var_old,'|')
	$data_tmp=$split[1] & '\' & $split[2]
	For $i=3 to $split[0] step 1
		$data_tmp=$data_tmp & '`|`' & $split[1] & '\' & $split[$i]
	Next
	$data=StringSplit($data_tmp,'`|`',1)
Else
	Dim $data[2]
	$data[0]=1
	$data[1]=$var_old
EndIf

$server = '****'
$username = '*****'
$pass = '******'

$Open = _FTP_Open('MyFTP Control')
$Conn = _FTP_Connect($Open, $server, $username, $pass, 1)
For $i=1 to $data[0] step 1
	_FTP_FilePut($Conn, $var, $data[$i])
Next
$Ftpc = _FTP_Close($Open)
 
Автор
R

Roman89

Новичок
Сообщения
107
Репутация
3
Не знаю у меня по чему то не хочет работать!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Sky-WaLkeR
А где тут Random? :smile:

Roman89
Посмотри на функцию _StringGetRandomString:

Код:
$sRandomString = _StringGetRandomString(15, 25, 0, "^[0-9A-Z]$")
MsgBox(64, 'Title', $sRandomString)

Func _StringGetRandomString($iMin = 1, $iMax = 1, $iOnly_ASCII = 0, $sChars_Pattern = "")
	If $iMax < $iMin Then
		Return SetError(1, 0, 0)
	EndIf
	
	Local $iRandom, $sRet_Str = '', $sChr
	Local $iMin_Rndm = 33, $iMax_Rndm = 255
	
	If $iOnly_ASCII And $sChars_Pattern = "" Then
		Dim $iMin_Rndm = 97, $iMax_Rndm = 122
	EndIf
	
	For $i = 1 To Random($iMin, $iMax, 1)
		$sChr = Chr(Random($iMin_Rndm, $iMax_Rndm, 1))
		
		If $sChars_Pattern <> "" Then
			While Not StringRegExp($sChr, $sChars_Pattern)
				If @error Then ExitLoop
				$sChr = Chr(Random($iMin_Rndm, $iMax_Rndm, 1))
			WEnd
		EndIf
		
		$sRet_Str &= $sChr
	Next
	
	Return $sRet_Str
EndFunc



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

Вот готовый скрипт, не проверял, но должно работать, строчки с _FTP* закоментировал.

Код:
#include <FTPEx.au3>

$message = "Hold down Ctrl or Shift to choose multiple files."
$sFiles = FileOpenDialog($message, @WindowsDir & "\", "Images (*.*)", 1 + 4)
If @error Then Exit MsgBox(4096, "", "No File(s) chosen")

$aFiles = StringSplit($sFiles, "|")
MsgBox(4096, "", "You chose " & $sFiles)

$server = '****'
$username = '*****'
$pass = '******'

;~ $Open = _FTP_Open('MyFTP Control')
;~ $Conn = _FTP_Connect($Open, $server, $username, $pass, 1)

For $i = 2 To $aFiles[0]
	$sFileExt = StringRegExpReplace($aFiles[$i], "^.*\.", ".")
	$sFileName = StringRegExpReplace($aFiles[$i], "^.*\\", "")
	
	$sLocal_File = $aFiles[1] & "\" & $aFiles[$i]
	$sFtp_File = _StringGetRandomString(5, 10, 0, "^[0-9a-z]$") & $sFileExt
	
;~ 	_FTP_FilePut($Conn, $sLocal_File, $sFtp_File)
Next

;~ $Ftpc = _FTP_Close($Open)

Func _StringGetRandomString($iMin = 1, $iMax = 1, $iOnly_ASCII = 0, $sChars_Pattern = "")
	If $iMax < $iMin Then
		Return SetError(1, 0, 0)
	EndIf
	
	Local $iRandom, $sRet_Str = '', $sChr
	Local $iMin_Rndm = 33, $iMax_Rndm = 255
	
	If $iOnly_ASCII And $sChars_Pattern = "" Then
		Dim $iMin_Rndm = 97, $iMax_Rndm = 122
	EndIf
	
	For $i = 1 To Random($iMin, $iMax, 1)
		$sChr = Chr(Random($iMin_Rndm, $iMax_Rndm, 1))
		
		If $sChars_Pattern <> "" Then
			While Not StringRegExp($sChr, $sChars_Pattern)
				If @error Then ExitLoop
				$sChr = Chr(Random($iMin_Rndm, $iMax_Rndm, 1))
			WEnd
		EndIf
		
		$sRet_Str &= $sChr
	Next
	
	Return $sRet_Str
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Roman89
Тема решена?
 
Верх