Hallo..
ich muss nochmal euer Fachwissen in Anspruch nehmen
Wie mir zu meiner Frage zum Auslesen des Fortschritts eines FTP-Uploads geraten wurde
habe ich nun versucht, mir eine Funktion mit FTPOpenFile & InternetWriteFile aus der Wininet.dll
zu schreiben.
Spoiler anzeigen
$x = _FTP_Upload( $serv, $username, $pass, 'testdatei.txt' )
MsgBox( 0, '', $x & '-' & @error )
Func _FTP_Upload( $server, $user, $password, $file )
#Region connect
Local $ai_InternetOpen = DllCall('wininet.dll', 'long', 'InternetOpen', 'str', 'PicTransfer', 'long', 1, 'str', '', 'str', '', 'long', 0)
If @error Or $ai_InternetOpen[0] = 0 Then
SetError(-1)
Return 0
EndIf
Local $i_ServerPort = 0, $l_Service = 1, $l_Context = 0, $l_InternetSession = $ai_InternetOpen[0]
Local $ai_InternetConnect = DllCall('wininet.dll', 'long', 'InternetConnect', 'long', $l_InternetSession, 'str', $server, 'int', $i_ServerPort, 'str', $user, 'str', $password, 'long', $l_Service, 'long', 0x08000000, 'long', $l_Context)
If @error Or $ai_InternetConnect[0] = 0 Then
SetError(-2)
Return 0
EndIf
Local $ai_ftpopenfile = DllCall( 'wininet.dll', 'long', 'FtpOpenFile', 'long', $ai_InternetConnect[0], 'str', $file, 'dword', '0x40000000', 'dword', 0x02, 'dword', 0 )
If @error Or $ai_ftpopenfile[0] = 0 Then
SetError(-3)
Return 0
EndIf
#EndRegion
#Region DataSend
$buffer = FileRead( $file )
$glen = StringLen( $buffer )
$x = Int( $glen/100 )
If $x = 0 Then $x = 1
Dim $out, $i = 0
Do
Local $ai_ftpwrite = DllCall( 'wininet.dll', 'int', 'InternetWriteFile', 'long', $ai_ftpopenfile[0], 'str', $buffer, 'int', $x, 'dword*', $out )
If @error Or $ai_ftpwrite[0] = 0 Then
SetError(-4)
Return 0
EndIf
$buffer = StringTrimLeft( $buffer, $x )
$i = $i +1
ToolTip( Round( 100 - (( StringLen( $buffer ) / $glen ) *100), 0 ) )
Sleep( 20 )
Until StringLen( $buffer ) = 0
#EndRegion
#region disconnect
Local $ai_InternetCloseHandle = DllCall('wininet.dll', 'int', 'InternetCloseHandle', 'long', $ai_InternetOpen[0])
If @error Or $ai_InternetCloseHandle[0] = 0 Then
SetError(-5)
Return 0
EndIf
#EndRegion
Return 1
EndFunc
Mit Textdateien funktioniert das soweit auch einwandfrei;
eigentlich habe ich das ganze jedoch für Bilder gedacht.
Und da beginnt die Problematik....
Die Bilder auf dem Server haben exakt die gleiche Dateigröße, werden aber nicht
angezeigt bzw. es wird gesagt "Bild sowieso konnte nicht angezeigt werden, da es Fehlerenthält".
Nun stellt sich mir die Frage: woran scheitert das ?
Ich hab schon so einiges mit Binary etc rumgespielt, aber bisher hat es noch
nicht funktioniert...
help me x)
mfg limette