meta data for this page
FTP-Funktionen
Es gibt eine Reihe von FF-Scriptbefehlen zur Datenübertragung nach dem File Transfer Protocol (FTP):
FF_CloseFTP | Schließt die bestehende FTP-Verbindung |
FF_CreateFTPDir | Erstellt ein Verzeichnis auf dem FTP-Server |
FF_DeleteFTPDir | Löscht ein Verzeichnis auf dem FTP-Server |
FF_DeleteFTPFile | Löscht eine Datei vom FTP-Server |
FF_ListFTPDirs | Liefert Verzeichnisse im aktuellen Pfad mit CRLF getrennt |
FF_FTPCommand | Führt einen FTP-Befehl aus |
FF_FTPFileExists | Überprüft, ob die Datei auf dem FTP-Server existiert |
FF_GetCurrentFTPDir | Liefert das aktuelle Verzeichnis auf dem FTP-Server |
FF_ListFTPFiles | Liefert Dateien im aktuellen Pfad mit CRLF getrennt |
FF_OpenFTP | Öffnet eine FTP-Verbindung |
FF_ReadFTPFile | Kopiert eine Datei vom FTP-Server auf den lokalen Rechner |
FF_RenameFTPFile | Benennt eine Datei auf dem FTP-Server um |
FF_SaveFTP | Lädt ein Bild auf einen Webserver |
FF_SetCurrentFTPDir | Setzt das Startverzeichnis für Pfad- und Datei-Auswahl auf dem FTP-Server. |
FF_WriteFTPFile | Kopiert eine Datei auf den FTP-Server |
Dazu einige fragmentarische Anmerkungen:
FF_OpenFTP
Das Öffnen der FTP-Verbindung ist Voraussetzung für die Anwendung fast aller weiteren FTP-Funktionen mit Ausnahme von FF_SaveFTP.
Wenn das Ergebnis = false ist, ist die Verbindung fehl geschlagen. FF erzeugt dann eigene Fehlermeldungen wie z.B.:
- Die Serververbindung konnte nicht hergestellt werden.
- Das Kennwort war unzulässig
zu 1. - Ursache ist wahrscheinlich, dass keine Internetverbindung besteht oder auf den FTP-Server kann nicht zugegriffen werden.
zu 2. - Der Benutzername oder das Passwort ist falsch.
FF_CloseFTP
Wurde eine FTP-Verbindung erfolgreich geöffnet, sollte man sie nach Ausführung aller gewünschten FTP-Funktionen mit diesem Befehl wieder schließen.
FF_SaveFTP
Diese Funktion erfordert kein vorheriges Öffnen der FTP-Verbindung, da dieser Befehl mit Hilfe der notwendigen Zugangsdaten in den Parametern die Verbindung selbst herstellen kann.
FF_WriteFTPFile
Eine auf dem Server bereits vorhandene Datei wird ohne Rückfrage überschrieben. Eine Sicherheitsabfrage kann mit der Funktion FF_FTPFileExists erstellt werden.
Vor dem Kopieren muss man mit FF_SetCurrentFTPDir das gewünschte Ablageverzeichnis setzen.
Wenn das Ergebnis = false ist, war die Übertragung fehlerhaft.
FF_SetCurrentFTPDir
Erwartet wird der gesamte Pfad beginnend ab dem Server-Wurzelverzeichnis, also z.B.
FF_SetCurrentFTPDir "/folder1/folder2/folder3"
Es gibt für Verzeichnisse kein dem Befehl FF_FTPFileExists (überprüft, ob die Datei auf dem FTP-Server existiert) entsprechenden Befehl. Stattdessen kann
geprüft werden, ob sich das betreffende Verzeichnis als Startverzeichnis für Pfad- und Datei-Auswahl setzen lässt:
If FF_SetCurrentFTPDir ("/folder1/folder2/folder3") = False Then Msgbox "folder3 existiert nicht" \\ **FF_CreateFTPDir**\\ Erwartet wird der gesamte Pfad beginnend ab dem Server-Wurzelverzeichnis, um einen "folder3" zu erzeugen also z.B.\\ FF_CreateFTPDir "/folder1/folder2/folder3" Dabei darf die Verzeichnisangabe nicht auf einen Slash enden.\\ Vor der Ausführung des Befehls, sollte man die Existenz des Verzeichnis mit **FF_SetCurrentFTPDir** prüfen, wie bei **FF_SetCurrentFTPDir** beschrieben.\\ \\ Zu beachten ist außerdem, dass das obige Beispiel die Existenz von folder1 und folder2 voraussetzt. Es können nicht mehrere Ebenen gleichzeitig angelegt werden. Man kann das Problem lösen, indem man rekursiv eine Ebene nach der anderen anlegt:\\ remotepath = "folder1/folder2/folder3" 'weder am Anfang noch am Ende ein Slash if FF_CreateFTPDir("/" & remotepath) = false then Array = split(remotepath,"/") for each element in Array path = path & "/" & element if FF_SetCurrentFTPDir(path) = false then if FF_CreateFTPDir(path) = false then msgbox "Der Serverpfad '" & remotepath & _ "' konnte nicht angelegt werden",vbExclamation,"Abbruch" FF_CloseFTP() exit sub end if end if next end if
Wenn anschließend auf dem neu angelegtem Serverpfad eine Datei abgelegt werden soll, muss dieser natürlich vorher mit FF_SetCurrentFTPDir gesetzt werden.
FF_SetCurrentFTPDir "/" & remotepath
Beispiel für FTP-Funktionen (vbs)
Es wird die Anwendung der folgenden FTP-Funktionen demonstriert:
FF_OpenFTP, FF_SetCurrentFTPDir, FF_CreateFTPDir, FF_FTPFileExists, FF_WriteFTPFile und FF_CloseFTP
Über einen Dialog kann man mit "FTP-Einstellungen" eine Maske zum Eintragen der Zugangsdaten aufrufen.
Mit Start der "FTP-Übertragung" wird das Bild auf der FF-Arbeitsfläche auf dem Server im angegebenen Verzeichnis abgelegt. Existiert das Verzeichnis nicht, wird es auf Wunsch angelegt.
Ist in den Zugangsdaten der Domainname angegeben, wird ein Link zum abgelegten Bild erzeugt und in die Zwischenablage übernommen.
Option Explicit const FTP_RegSchluessel = "FTP_Ablage" 'Registryschlüssel Dim fso 'Objekte Set fso = CreateObject("Scripting.FileSystemObject") Dim file,FTP_file Dim server,remotepath,domain,user,pwd,passiveftp,bool_pFTP '--------------------------------------------------------------------- if FF_GetImageWidth = 0 then msgbox "Es ist kein Bild geladen!",vbCritical,"Abbruch" else call Dialog end if Set fso = nothing '--------------------------------------------------------------------- Sub FTP_Uebertragung Dim Antwort,path '### Werteprüfung if len(server) = 0 or len(remotepath) = 0 or len(user) = 0 then msgbox "Es müssen mindestens Werte für" & vbNewLine & _ "den FTP-Server, den Serverpfad und den Benutzernamen" & vbNewLine & _ "eingegeben werden!",vbExclamation,"Hinweis" call FTP_Dialog exit sub end if '### Passwortprüfung if len(pwd) = 0 then pwd = trim(inputbox("Passwort?","Eingabeaufforderung")) if len(pwd) = 0 then exit sub end if '### FTP-Verbindung öffnen und Serverpfad prüfen if FF_OpenFTP(server,user,pwd,bool_pFTP) = false then 'Verbindung öffnen msgbox "Die Serververbindung konnte nicht geöffnet werden",vbExclamation,"Abbruch" exit sub end if if FF_SetCurrentFTPDir("/" & remotepath) = false then 'Test ob Verz. vorhanden Antwort = msgbox("Der Serverpfad '" & remotepath & "'" & vbNewLine & _ "existiert nicht!" & vbNewLine & _ "Soll er angelegt werden?",vbYesNo + vbQuestion,"Abfrage") if Antwort = vbNo then FF_CloseFTP() exit sub else if FF_CreateFTPDir("/" & remotepath) = false then 'ggf. Verzeichnis anlegen Array = split(remotepath,"/") for each element in Array path = path & "/" & element if FF_SetCurrentFTPDir(path) = false then if FF_CreateFTPDir(path) = false then msgbox "Der Serverpfad '" & remotepath & _ "' konnte nicht angelegt werden",vbExclamation,"Abbruch" FF_CloseFTP() exit sub end if end if next end if if FF_SetCurrentFTPDir("/" & remotepath) = false then msgbox "Der Serverpfad '" & remotepath & _ "' konnte nicht angelegt werden",vbExclamation,"Abbruch" FF_CloseFTP() exit sub end if end if end if '### Testen ob Bild bereits auf dem Server existiert file = FF_GetImageName(-1) 'Bildpfad für aktives Bild ermitteln FTP_file = fso.GetFileName(file) if FF_FTPFileExists(FTP_file) then 'Sicherheitsabfrage wenn Bild vorhanden Antwort = msgbox("Das Bild '" & fso.GetFileName(file) & "' ist bereits" & vbNewLine & _ "im Webpfad '" & remotepath & "' abgelegt." & vbNewLine & vbNewLine & _ "Soll es überschrieben werden?",vbYesNo + vbQuestion,"Abfrage") if Antwort = vbNo then FF_CloseFTP() exit sub end if end if '### Bild auf dem Server ablegen und den Link in die Zwischenablage übernehmen if FF_WriteFTPFile(file,FTP_file) then 'Bild auf dem Server ablegen if len(domain) > 0 then call FF_TextToClipboard(domain & "/" & remotepath & "/" & FTP_file) 'Zwischenablage msgbox "Das Bild wurde erfolgreich abgelegt!" & vbNewLine & _ "Der Link" & vbNewLine & _ domain & "/" & remotepath & "/" & FTP_file & vbNewLine & _ "wurde in die Zwischenablage übernommen.",vbInformation,"Bildlink" else msgbox "Das Bild wurde erfolgreich abgelegt!" & vbNewLine & _ "Da die Domain nicht angegeben ist, kann" & vbNewLine & _ "kein Link erzeugt werden.",vbInformation,"Hinweis" end if else msgbox "Bei der Übertragung ist ein Fehler aufgetreten!",vbExclamation,"Abbruch" end if '### FTP-Verbindung schließen FF_CloseFTP() End Sub '--------------------------------------------------------------------- Sub Dialog '** Start Dialog FTP-Ablage ** FF_AddDialog "FTP-Ablage",81,45 FF_AddControl "FTP-Ablage","FTP-Einstellungen","BUTTON",14,6,52,11 FF_AddControl "FTP-Ablage","FTP-Übertragung","BUTTON",14,26,52,11 '** End Dialog FTP-Ablage ** call FTP_RegistryLesen do Select Case FF_ShowDialog ("FTP-Ablage") Case "FTP-Einstellungen" call FTP_Dialog Case "FTP-Übertragung" call FTP_Uebertragung exit do Case "CANCEL" exit do Case Else End Select loop FF_CloseDialog ("FTP-Ablage") End Sub '--------------------------------------------------------------------- Sub FTP_Dialog '** Start Dialog FTP-Zugang ** FF_AddDialog "FTP-Zugang",160,82 FF_AddControl "FTP-Zugang","FTP-Server","STATIC",5,5,40,10 FF_AddControl "FTP-Zugang","server","SLEDIT",50,5,105,10 FF_AddControl "FTP-Zugang","Serverpfad","STATIC",5,15,40,10 FF_AddControl "FTP-Zugang","remotepath","SLEDIT",50,15,105,10 FF_AddControl "FTP-Zugang","Domainname","STATIC",5,25,40,10 FF_AddControl "FTP-Zugang","domain","SLEDIT",50,25,105,10 FF_AddControl "FTP-Zugang","Benutzername","STATIC",5,35,40,10 FF_AddControl "FTP-Zugang","user","SLEDIT",50,35,105,10 FF_AddControl "FTP-Zugang","Passwort","STATIC",5,45,40,10 FF_AddControl "FTP-Zugang","pwd","SLEDIT",50,45,105,10 FF_SetControlStyle "FTP-Zugang","pwd",32 FF_AddControl "FTP-Zugang","Passiv FTP","STATIC",15,68,28,10 FF_AddControl "FTP-Zugang","passiveftp","BOOL",4,69,8,8 FF_AddControl "FTP-Zugang","Ist kein Passwort eingegeben, wird es jeweils abgefragt.","STATIC",5,56,150,8 FF_AddControl "FTP-Zugang","?","BUTTON",84,68,11,11 FF_AddControl "FTP-Zugang","Übernehmen","BUTTON",112,68,38,11 '** End Dialog FTP-Zugang ** '### Werte in Dialog eintragen FF_SetControl "FTP-Zugang","server",server FF_SetControl "FTP-Zugang","remotepath",remotepath FF_SetControl "FTP-Zugang","domain",domain FF_SetControl "FTP-Zugang","user",user FF_SetControl "FTP-Zugang","pwd",pwd FF_SetControl "FTP-Zugang","passiveftp",passiveftp do Select Case FF_ShowDialog ("FTP-Zugang") Case "?" Msgbox "- FTP-Server (unbedingt notwendig)" & vbNewLine & _ "FTP-Adresse des Webservers (z.B. meineseite.de)" & vbNewLine & vbNewLine & _ "- Serverpfad (unbedingt notwendig)" & vbNewLine & _ "Verzeichnis in das die Bilder abgelegt werden sollen (z.B. bilder)" & vbNewLine & _ "Existiert das Verzeichnis nicht, wird es auf Wunsch angelegt." & vbNewLine & vbNewLine & _ "- Domainname" & vbNewLine & _ "URL des Webspaces (z.B. http://www.meineseite.de)" & vbNewLine & _ "Er wird nur zur Erzeugung eines Link auf das abgelegte Bild benötigt."& vbNewLine & vbNewLine & _ "- Benutzername (unbedingt notwendig)" & vbNewLine & _ "Benutzername zum Einloggen auf dem FTP-Server" & vbNewLine & vbNewline & _ "- Passwort" & vbNewLine & _ "Passwort zum Einloggen auf dem FTP-Server." & vbNewLine & _ "Wird kein Passwort eingegeben, wird es jeweils abgefragt." & vbNewLine & vbNewLine & _ "- Passiv-FTP" & vbNewLine & _ "Wird eine Firewall benutzt, ist dieses Kästchen anzuhaken, falls" & vbNewLine & _ "die FTP-Verbindung nicht zustande kommt.",vbInformation,"Erläuterung zum FTP-Zugang" Case "Übernehmen" call FTP_RegistrySchreiben exit do Case "CANCEL" exit do Case Else End Select loop FF_CloseDialog ("FTP-Zugang") End Sub '------------------------------------------------------------------- Sub FTP_RegistryLesen 'Schlüsselname = HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Script\ & FTP_RegSchluessel '### Werte aus Registry auslesen server = FF_GetProfile (FTP_RegSchluessel,"server") remotepath = FF_GetProfile (FTP_RegSchluessel,"remotepath") domain = FF_GetProfile (FTP_RegSchluessel,"domain") user = FF_GetProfile (FTP_RegSchluessel,"user") pwd = FF_GetProfile (FTP_RegSchluessel,"pwd") passiveftp = FF_GetProfile (FTP_RegSchluessel,"passiveftp") if passiveftp = "" then passiveftp = 0 if passiveftp = 0 then bool_pFTP = false else bool_pFTP = true End Sub '--------------------------------------------------------------------- Sub FTP_RegistrySchreiben 'Schlüsselname = HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Script\ & FTP_RegSchluessel '### Werte aus Dialog auslesen server = trim(FF_GetControl("FTP-Zugang","server")) remotepath = trim(FF_GetControl("FTP-Zugang","remotepath")) if remotepath = "/" then remotepath = "" do if left(remotepath,1) = "/" and len(remotepath) > 1 then remotepath = mid(remotepath,2) else exit do end if loop do if right(remotepath,1) = "/" and len(remotepath) > 1 then remotepath = left(remotepath,len(remotepath)-1) else exit do end if loop domain = trim(FF_GetControl("FTP-Zugang","domain")) user = trim(FF_GetControl("FTP-Zugang","user")) pwd = trim(FF_GetControl("FTP-Zugang","pwd")) passiveftp = trim(FF_GetControl("FTP-Zugang","passiveftp")) if passiveftp = 0 then bool_pFTP = false else bool_pFTP = true '### Werte in Registry schreiben FF_WriteProfile FTP_RegSchluessel,"server",server FF_WriteProfile FTP_RegSchluessel,"remotepath",remotepath FF_WriteProfile FTP_RegSchluessel,"domain",domain FF_WriteProfile FTP_RegSchluessel,"user",user FF_WriteProfile FTP_RegSchluessel,"pwd",pwd FF_WriteProfile FTP_RegSchluessel,"passiveftp",passiveftp End Sub '--------------------------------------------------------------------- Überträgt man den Link in die Adresszeile eines Browsers, kann man direkt überprüfen, ob das Bild ordnungsgemäß abgelegt wurde.\\ \\
Vorhandene FTP-Daten auslesen
Statt die FTP-Daten vom User in eine Maske eintragen zu lassen, kann man auch die ggf. in den Optionen des Speicherdialogs von FixFoto eingegebenen Daten auslesen.
'### FixFoto-FTP-Daten aus der Registry auslesen const FF_FTP_Reg = "HKCU\Software\Joachim Koopmann Software\FixFoto\Options\" Dim server,remotepath,domain,user,pwd,passiveftp Dim WshShell Set WshShell = CreateObject("WScript.Shell") On Error Resume Next server = WshShell.RegRead (FF_FTP_Reg & "FTPServer") remotepath = WshShell.RegRead (FF_FTP_Reg & "FTPPath") domain = WshShell.RegRead (FF_FTP_Reg & "FTPDPath") user = WshShell.RegRead (FF_FTP_Reg & "FTPUser") pwd = WshShell.RegRead (FF_FTP_Reg & "FTPPwd") passiveftp = WshShell.RegRead (FF_FTP_Reg & "PassiveFTP") On Error GoTo 0
Während des Auslesens müssen Fehlermeldungen mit On Error Resume Next ausgbelendet werden, weil nicht vorhandene Daten einen Fehler erzeugen.
Wenn anschließend auf dem neu angelegtem Serverpfad eine Datei abgelegt werden soll, muss dieser natürlich vorher mit FF_SetCurrentFTPDir gesetzt werden.