Benutzer-Werkzeuge

Webseiten-Werkzeuge


ftp-funktionen

Dies ist eine alte Version des Dokuments!


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.

ftp-funktionen.1324891320.txt.gz · Zuletzt geändert: (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki