Du kannst dir einen Webspace, wie zum Beispiel bei Kili.de, zulegen. Benutze schon seit ca. 1 Jahr meinen FTP-Server bei Kilu und kann mich nicht beklagen.
Gebe dir hier gleich mal eine Download Funktion mit. Hatte diese mal aus Langeweile gescripted. Die Funktion nennt sich _Update, weil diese eigentlich für meine Bot´s gedacht war.
;Author(s) : Logtetsch
;Functions : _Update ($szUrl, $szFilename)
;Definition : $szUrl = Downloadseite
; : $szFilename = Wie die Datei am ende heißen soll
;Fehler : 0 = keine Fehler
; : 1 = Download wurde unterbrochen. Es liegen keine Informationen vor. (Wohlmöglich stimmt die angegebene Downloadseite nicht!)
; : 2 = Download konnte nicht gestartet werden. Dateigröße konnte nicht festgestellt werden. (Wohlmöglich stimmt die angegebene Downloadseite nicht!)
#include-once
Func _Update($szUrl, $szFilename)
Local $Url = $szUrl
Local $FileName = $szFilename
Local $szFileSize = InetGetSize ($Url) / 1024 / 1024
Local $hDownload = InetGet ($Url, $FileName, 1, 1)
If $szFileSize > 0 Then
if FileExists ($FileName) Then
FileDelete ($FileName)
EndIf
ProgressOn ("Download Update", "Download: ")
While True
Local $nInfo = InetGetInfo ($hDownload)
if IsArray ($nInfo) Then
Local $nDownloadPercent = $nInfo[0] * 100 / $szFileSize
ProgressSet ($nDownloadPercent / 1000000, Round ($nInfo[0] / 1024 / 1024, 2) & " mb von " & Round ($szFileSize, 2) & " mb")
Else
ProgressOff()
Return SetError (1,"",False)
EndIf
if IsArray ($nInfo) Then
if $nInfo[2] Then
ExitLoop
EndIf
EndIf
WEnd
ProgressOff ()
MsgBox (64,"Download","Download wurde erfolgreich abgeschlossen!")
Return True
Else
Return SetError (2, "", False)
EndIf
EndFunc
Ist noch etwas ausbaufährig was die Abfragen betrifft, aber an sich sollte diese Funktion ihre Aufgabe gut erfüllen.
Achja, bevor ich noch von jemand besimmten angepöbelt werde, die Idee mit der Progressbar kam von KDeluxe´s UDF.
Die UDF habe ich nur bei deinem Scripts verwendet, sollte daher niemand kennen.
Allerdings stell ich mir schon die Frage, warum du es verschlimmbessert hast. Den Download sollte man z. B. erst nach der Prüfung der Dateigröße starten.
Nunja, ich hab ja deine UDF nicht 1:1 nachgescriptet, sonst hätte es ja keinen Sinn. Ich hatte selbst den Drang mir eine eigene zu coden. Allerdings kam die Idee mit der Progressbar besser. Wie ich bereits gesagt habe, kann man die Abfragen nach belieben ändern bzw. verbessern. Ob nun die Dateigröße während dem Downloaden, oder vor dem Downloaden, angezeigt wird, spielt doch letzendlich keine Rolle. Die Funktion an sich sollte klappen
Einen Zugang braucht man nicht unbedingt. Durch ein .php oder ein .html Dokument sollte es auch funktionieren.
#.html Dokument auf dem FTP Server
Code:
<Version>1.0</Version>
#.au3 Code
Code:
Global $myVersion = "0.9"
Local $Site = "http://www.ftpserver.de/Version.html"
Local $Info = BinaryToString (InetRead( $Site ))
Local $newVersion = _StringBetween ($Info, "<Version>","</Version>")
if IsArray ($newVersion) Then
if $newVersion[0] <> Then
_Update (....)
EndIf
EndIf
Die Downloadgröße wird vor dem Download in beiden Scripts nicht "angezeigt". In deinem Script wird die Abfrage schlichtweg nicht optimal genutzt. Die Zeile mit FileDelete() hat in deinem Script ebenfalls nichts zu suchen. Theoretisch könnte die Zeile dafür verantwortlich sein, dass die Datei nach dem Download sofort wieder gelöscht wird und somit nicht "weiterverarbeitet" werden kann. Wobei du die Ressourcen nie freigibst, wodurch der Zugriff zum Löschen verweigert werden kann. Eine zweimalige Abfrage für exakt das selbe (IsArray) ist ebenfalls unnötig und unperformant. "Sollte" ist nicht ausreichend.
Mal zur eigentlichen Frage zurück, in der Hilfe steht die Antwort:
Quote:
Originally Posted by F1-Hilfe
To use a username and password when connecting simply prefix the servername with "username:password@", e.g.
"http://myuser:"
Die Versionsüberprüfung wäre auch in einer Zeile lösbar:
Code:
$LocalVersion = "1.0"
$Source = BinaryToString(InetRead("http://www.somesite.com/path/version.html"))
$CurrentVersion = _StringBetween($Source, "<version>", "</version>")
If IsArray($CurrentVersion) And $CurrentVersion[0] <> $LocalVersion Then _Update()
Was man (fast) immer machen kann: @error abfragen.
Weshalb probierst du es überhaupt per FTP? Hat doch hier überhaupt keinen Nutzen.
Relativ einfach gelöst:
Code:
$SaveFile = @ScriptDir & "\Bla.txt"
$FileName = InputBox("Download", "Dateiname:", "testdatei1.txt")
If $FileName <> "" Then
For $i = 1 To 5
If $FileName = "testdatei" & $i & ".txt" Then
If FileExists($SaveFile) Then FileDelete($SaveFile)
InetGet("http://knixxed.kn.funpic.de/Dowmloader/" & $FileName, $SaveFile, 1)
If @error Then MsgBox(32, "Fehler", '"' & $FileName & '" konnte nicht heruntergeladen werden!')
MsgBox(64, "Info", '"' & $FileName & '" wurde unter' & @LF & @LF & '"' & $SaveFile & '"' & @LF & @LF & "gespeichert.")
Exit
EndIf
Next
MsgBox(32, "Fehler", '"' & $FileName & '" ist nicht auf dem Server vorhanden!')
Else
MsgBox(32, "Fehler", "Es wurde kein gültiger Dateiname angegeben!")
EndIf
Was man (fast) immer machen kann: @error abfragen.
Weshalb probierst du es überhaupt per FTP? Hat doch hier überhaupt keinen Nutzen.
Relativ einfach gelöst:
Code:
$SaveFile = @ScriptDir & "\Bla.txt"
$FileName = InputBox("Download", "Dateiname:", "testdatei1.txt")
If $FileName <> "" Then
For $i = 1 To 5
If $FileName = "testdatei" & $i & ".txt" Then
If FileExists($SaveFile) Then FileDelete($SaveFile)
InetGet("http://knixxed.kn.funpic.de/Dowmloader/" & $FileName, $SaveFile, 1)
If @error Then MsgBox(32, "Fehler", '"' & $FileName & '" konnte nicht heruntergeladen werden!')
MsgBox(64, "Info", '"' & $FileName & '" wurde unter' & @LF & @LF & '"' & $SaveFile & '"' & @LF & @LF & "gespeichert.")
Exit
EndIf
Next
MsgBox(32, "Fehler", '"' & $FileName & '" ist nicht auf dem Server vorhanden!')
Else
MsgBox(32, "Fehler", "Es wurde kein gültiger Dateiname angegeben!")
EndIf
Warum ? Weil es sone Art Selbsttest ist/war.
Meine Frage is jetzt warum man da soviel drum herum machen muss, er soll ja einfach nur die Dateien von dem ftp runterladen ?
Muss man nicht, aber es ist angemessen. So kann man einfache Fehler vermeiden. Allerdings gilt KDeluxe´s Methode nur für die ersten fünf bzw. überhaupt nur für die Dateien, die den Namen "testdatei" entsprechen. So ist man unflexibel. Eine vielleicht etwas einfachere Variante wäre dann wohl diese:
Code:
#include <String.au3>
Local $DownloadUrl = "Downloadurlauseinemftpserver"
Local $url = "deinhtmldokument"
Local $szData = BinaryToString (InetRead ($url))
Local $szUserDownloadPanel = _StringBetween ($szData, "<Dokumente>", "</Dokumente>")
Global $szDocument, $hStatus = 0
if IsArray ($szUserDownloadPanel) And $szUserDownloadPanel[0] <> "" Then
$szDocument = StringSplit($szUserDownloadPanel[0], "|")
if IsArray ($szDocument) Then
Local $hInput = InputBox ("Datei","Geben Sie einen Dateinamen ein!")
if $hInput <> "" Then
For $i = 0 to UBound ($szDocument)
if $hInput = $szDocument[$i] Then
$hStatus = 1
ExitLoop
Else
MsgBox (46,"Fehler","Datei konnte nicht gefunden werden, oder Sie haben nicht die benötigte Rechte!", 5)
Exit
EndIf
Next
Local $hDownload = InetGet ($DownloadUrl, $FileName, 1+8, 1)
if not @error Then
While True
Local $szDownloadInfo = InetGetInfo ($hDownload)
if IsArray ($szDownloadInfo) and $szDownloadInfo[2] = True Then
MsgBox (64,"Info","Download wurde erfolgreich abgeschlossen!")
Exit
EndIf
WEnd
EndIf
EndIf
EndIf
EndIf
Das musst du natürlich ebenfalls mit einem .html Dokument verknüfpen. Es gibt noch weite Möglichkeiten, habe aber momentan wenig Zeit (wegen meiner Ausbildung), um diese aufzuzählen bzw. zeigen. Habe das ganze auf die schnelle gemacht, deshalb hoffe ich, dass es keine Fehler gibt
Achja, das ganze sollte inetwa so aussehen. #.html Dokumet
Noch mehr Text.. :S
Mir sieht das da alles ziemlich komplex aus, kann man das auch sonst ziemlich einfach machen ?
Weil sonst muss ich mich davor jetzt noch n parr Tage mit For Schleifen & dem ganzem anderem Zeug beschäftigen..
Problem mit InetGet 01/31/2011 - AutoIt - 8 Replies Hi
Ich will per InetGet() ein paar Dateien runterladen.
Die Dateien sollen aber nicht direkt in den Ordner, in dem die EXE ist, sondern in einen Unterordner.
Die Dateien werden zwar runtergeladen aber sind alle 4KB groß (sind sie in Wirklichkeit nicht) und fehlerhaft/funktionieren nicht.
Gui per Inetget? 09/16/2010 - AutoIt - 8 Replies Hi.
Ich will in meinem neuen Trainer für S4League dieses bild als hintergrund
http://www.mypspwallpapers.com/uploads/200704/f/1 176278451.jpg
aber ich habe nicht wirklich lust dass in einen Ordner zu packen...
Könntet ihr mir kurz und knackig erklären wie das mit Inetget zu realisieren wäre?
InetGet ftw 07/13/2010 - AutoIt - 0 Replies Hat sich erledigt ;D
Bitte löschen
Frage zu InetGet in Autoit 12/30/2008 - Guild Wars - 12 Replies Hi,
hab die Helpfiles durchforstet aber nichts gefunden...
Also in AutoIT gibt es ja den Befehl InetGet. Soweit ich es verstanden habe, kann man mit diesem Befehl Datein aus dem Internet herunterladen.
Und nein, ich brauch das nicht um Trojaner,Viren und co zu machen.
Alles was ich machen will ist ein kleines Tool, mit dem man einfach den entsprechenden (public) Bot downloaden kann.(z.B. Thermalquellen, ohne lang nach der aktuellen suchen zu muessen).
MfG,
NBA