Verzeichnis per ftp runterladen?

Startseite Foren Deutsches LiveCode-Forum Verzeichnis per ftp runterladen?

Schlagwörter: 

Ansicht von 18 Antwort-Themen
  • Autor
    Beiträge
    • #23634
      foto2004
      Teilnehmer

      Hallo Gemeinde,

      mal wieder eine Frage, wie stell ich es an dass Schmier ein gesamtes Verzeichnis in einem Rutsch per FTP runterladen kann?

      Es soll per ftp der Inhalt eines gesamten Verzeichnisses local runterladen werden und das bei einer Standalone APP unter DWIN10

    • #23636
      Axwald
      Teilnehmer

      Hallo,
      meines Wissens unterstützt FTP das nicht.
      Einzeln holen per Loop geht aber problemlos.

      Um Dir das Verzeichnis anzeigen zu lassen:

         put "ftp://" & userName & ":" & URLEncode(userPassword) \
               & "@" & ftpServ into URLToGet
         --  ftpServ ist die URL & endet mit "/"!
         libURLSetFTPListCommand "NLST" 
         put URL URLToGet into MyVar
         get the result
      -----
      MyVar:
         .
         ..
         LogFile.txt

      Wenn Du libURLSetFTPListCommand „LIST“ setzt, sieht das Ergebnis so aus:

      MyVar:
         drwxrwxr-x   2 f00a00e5 w0124df9     4096 Nov  8  2017 .
         drwxr-xr-x   6 f00a00e5 w0124df9     4096 Aug 22  2019 ..
         -rw-r--r--   1 f00a00e5 w0124df9     1062 Oct 16 01:44 LogFile.txt

      (Ich hab hier nur 1 Datei, beachte die Linux-typischen „.“ & „..“!)

      Viel Spaß!

    • #23638
      Klaus Major
      Verwalter

      Eventuell klappt auch der FTP Befehl -> PWD (Print Working Directory)!?
      Der listet „nur“ den Inhalt des FTP Ordners auf, wäre für Dein Anliegen etwas komfortabler:

      ...
      libURLSetFTPListCommand "PWD"
      ...

      BLÖDSINN! 😀
      Siehe unten…

    • #23640
      foto2004
      Teilnehmer

      hmmmmm.

      ich hatte es ja vorher mit get shell versucht ein batch zu starten aber das geht irgendwie auch nicht (die .bat geht am Windows einwandfrei). nun war meine Hoffnung das per FTP hier zu versuchen.

      das libURLSetFTPListCommand ???? steht mir das jeden ftp Befehl um?

    • #23641
      Klaus Major
      Verwalter

      Was genau meinst Du mit: … steht mir das jeden ftp Befehl um?

    • #23646
      Klaus Major
      Verwalter

      Bitte vergiss meinen vorvorigen Post mit …PWD, das ist falsche Syntax.
      So geht es richtig:

      ...
      put libURLftpCommand("PWD", "ftp.example.org", Username, URLEncode(Password)) into field "Inhalt des FTP servers"
      ...
    • #23648
      Axwald
      Teilnehmer

      Hallo,

      „libURLSetFTPListCommand“ sagt dem FTP-Server, in welcher Form er auf die Anforderung eines „Directory Listing“ reagieren soll:
      „NLST“ für Kurzform, „LIST“ für die ausführliche Form.
      Das muß nur 1x pro Sitzung gesendet werden.

      „libURLftpCommand(„PWD“ …“ geht auf meinem FTP nicht – nur im Root-Verzeichnis („meinServer.de“) bekomme ich überhaupt eine Antwort, und die ist:
      257 "/" is the current directory
      Der User hat in dem Verzeichnis alle Rechte, und es liegen ein paar Verzeichnisse & 2 PHP Scripte drin.

      Sobald ich in der Server-URL ein „/“ habe, gibts:
      error invalid host address

      Viel Spaß!

    • #23651
      Torsten
      Teilnehmer

      Hi,

      wie @Klaus aber schon mal befürchtet hat, kann es sein, dass manche FTP-Server die Command nicht mehr unterstützen.
      Ich habe eben auch verschiedene Wege ausprobiert und am besten hat es hiermit geklappt:

      get url ("ftp://" & FTPUSER & ":" & FTPPASS & "@" & FTPHOST & slash & tDirectory & slash)

      Man bekommt dann die Liste wie oben mit Dateigröße, Bytes etc. und kann die Namen aber einfach mit set itemdelimiter und last item rausfischen.

      Happy Coding
      Torsten

    • #23653
      Torsten
      Teilnehmer

      Ha,
      man kann die vereinfachte Form mit NLST auch beim url anwenden:

      libURLSetFTPListCommand "NLST"
      get url ("ftp://" & FTPUSER & ":" & FTPPASS & "@" & FTPHOST & slash & tDirectory & slash)

      Das Ergebnis ist dann:

      .
      ..
      datei1.txt
      datei2.txt

      Happy Coding
      Torsten

    • #23670
      Torsten
      Teilnehmer

      Hi,

      da es ja nicht in einem Rutsch geht, wäre die Frage, wieso Du es dann nicht ganz normal über HTML machst?

      Das Problem bei einfachem FTP ist nämlich, dass Du das Passwort für den FTP-Zugang im KLARTEXT über das Netz schickst und damit den Servern in der Mitte quasi den Schlüssel zu deinem Server gibst.

      In der Community-Version von LC ist ja nur normales FTP möglich, ich würde also entweder auf die Indy mit SFTP umsteigen (tsNetGetFile) oder die Dateien im Verzeichnis ganz einfach per put downloaden und speichern:
      put url ("http://servername/dateiname") into url ("binfile:" & "lokalerPfad/dateiname")

      Happy Coding
      Torsten

    • #23682
      foto2004
      Teilnehmer

      Hallo Torsten,

      ich möchte da so ein Update realisieren. Ich habe mir da ein kleines Program erstellt um gewisse listen zu durchsuchen. Klappt alles prima nur möchte ich nicht immer wenn ich was ändere das ich jedesmal über eine Cloud-Freigabe alles rüber kopieren muss sondern einfach einen Button klicke und das wars. (Schöner Traum) Habe es, als Zwischenlösung mit einer batch Datei gelöst ist aber nicht das was ich eigentlich möchte. Ziel ist es einfach den Inhalt eines ganzen Verzeichnisses runter zu laden.

      Habe auch schon daran gedacht eine Zip zu machen und zu entpacken …. naja weiß aber nicht wie ich die entpackt bekomme.

      Ja es ist halt alles nicht so einfach, vor allem wen man es doppelt nimmt.

      Ja dass mit der Indi-Version habe ich schon angepeilt und wird früher oder später auch kommen aber 500 im Jahr …. uff

      LG Immanuel

      • #23707
        Torsten
        Teilnehmer

        Habe auch schon daran gedacht eine Zip zu machen und zu entpacken …. naja weiß aber nicht wie ich die entpackt bekomme.

        Da gibt es Livecode-Befehle dafür, schau mal nach revZip*** im Dictionary nach 🙂

        Happy Coding
        Torsten

    • #23684
      Klaus Major
      Verwalter

      Wenn Du Zugang zu dem Server hast, und es klingt ja fast so, würde ich auch alles per HTTPS realisieren.

      Zuerst ein CGI erstellen, was Dir den Inhalt eines bestimmten Ordners auf dem Server liefert***
      und dann diese Liste abarbeiten mit -> LibUrlDownLoadToFile, was auch in der Community Version
      funktioniert. Ist auf jeden Fall problemloser als alles per FTP zu versuchen.

      *** Da gibt es sicher zig PHP o.ä. Beispiele im Netz

    • #23693
      Torsten
      Teilnehmer

      Hi Immanuel,

      ich habe immer noch nicht genau verstanden:

      1. Was liegt auf dem Server im Web und wie kommt es dahin?
      2. Kann man die Dateien per URL http://meinsever/meinedatei runterladen?
      3. Kannst Du auf dem Server selber Dateien erzeugen?
      4. Wieso geht die bestehende Lösung mit der Batch-Datei nicht, wie lädt denn die Batchdatei die Dateien runter?

      Beste Grüße
      Torsten

    • #23699
      Axwald
      Teilnehmer

      Huch,
      da ist schon wieder ein Post verschwunden …
      Sollte hier erscheinen.

      Viel Spaß!

    • #23650
      Torsten
      Teilnehmer

      Hi,

      wie @Klaus hier https://www.livecode-blog.de/forums/topic/ftp-server-dateien-listen/#post-9924 scjon mal befürchtet hat, kann es sein, dass manche FTP-Server die Command nicht mehr unterstützen.

      Ich habe eben auch verschiedene Wege ausprobiert und am besten hat es hiermit geklappt:

      get url ("ftp://" & FTPUSER & ":" & FTPPASS & "@" & FTPHOST & slash & tDirectory & slash)

      Man bekommt dann die Liste wie oben mit Dateigröße, Bytes etc. und kann die Namen aber einfach mit set itemdelimiter und last item rausfischen.

      Happy Coding
      Torsten

    • #23698
      Axwald
      Teilnehmer

      foto2004,

      ich mache genau das, was Du beschreibst. Nur mit einem anderen Ansatz:

      1.) Ich habe 1 Datei auf dem Server, in der alles gelistet ist, was das Programm braucht. 1 Zeile pro Datei, Elemente tab-getrennt:

      [Dateiname] » [CRC32-Wert] » [Ziel-Verz.] » [Quell-Verz.] » [Typ]
         Beispiel:
      myDBLib.rev » D309A2DA » modules » static » inuse

      Das ist ein Library-Stack „myDBLib.rev“, der hier wohnen soll:
      specialFolderpath(„documents“) & „/modules/myDBLib.rev“
      Heruntergeladen wird er von:
      [WebServerURL] & „/static/myDBLib.rev“
      CRC32 ist ein Hash-Wert über die Datei – Änderung an Datei, neuer CRC32.
      Der Typ beschreibt, was mit der Datei passiert: „Stack“ – nix tun; „inUse“ – „start using stack …“; „front“ – einfügen als Front-Script etc.

      2.) Im openStack-Handler läuft ein Loop, der diese Datei auswertet:
      – Wenn Sie nicht in Ziel-Verz. ist, download von Quell-Verz..
      – Wenn CRC32 nicht stimmt, neuer Download von Quell-Verz..
      – Wenn alles passt, behandeln nach Typ.

      Fertig. Jedesmal wird alles gecheckt, ggf. erneuert. Programm ist immer aktuell.
      Alles was ich machen muß, ist die geänderten Dateien ins richtige Verzeichnis aufm FTP zu schieben, und den CRC-Wert in der Dateiliste anzupassen. Den zeigt mir 7zip im Explorer-Kontext-Menü an.
      Dann Programm aufm andren Rechner starten, und es aktualisiert sich.

      Ich nehme FTP zum Download, ist nach meiner Erfahrung schneller & stabiler als HTTP(s), und ich kann mit einer einfachen Zugangskontrolle arbeiten. HTTP(s) sollte aber genauso gehen.

      Code für CRC32-Check:

      function gzCRC32 theFile
         /* Code by Alejandro Tejada (capellan2000 at gmail.com)
         Mailing list: >http://runtime-revolution.278305.n4.nabble.com/ANN-CRC-32-LiveCode-stack-td4246201.html
         Source: > http://at.livecodejournal.com/stacks/CRC-32_LiveCode_Script.zip
         The Bytes returned are reversed to get compatible CRCs, by axwald   */
         put compress(URL ("binfile:" & theFile)) into tData
         put char -8 to -5 of tData into mki -- Url "binfile:data.gz" (axwald: ???)
         put char 4 of mki & char 3 of mki & char 2 of mki & char 1 of mki into mki  --  axwald, reverse it
         repeat for each char n in mki
            put chartonum(n) into nft
            put baseconvert(nft,10,16) into kjh
            if the number of chars of kjh < 2 then put "0" before kjh
            put kjh after cdf
         end repeat
         return cdf
      end gzCRC32

      Viel Spaß!

    • #23705
      foto2004
      Teilnehmer

      Danke erst mal für deinen Ansatz.
      Uff das muss ich erst mal alles verdauen und aufdröseln, sprich verstehen.
      so weit reicht mein Verständnis noch nicht ganz aber ich versuche es mal nachzuvollziehen.

      Wird ein paar Tage dauern 😉 bis meine Gehirnwindungen das verarbeitet haben.

      LG Immanuel

    • #23784
      foto2004
      Teilnehmer

      Hallo Torsten,

      1. es sind die Standalone Dateien die ich da hinauf lade

      2. es sind aber auch Dateien die sich auch mal mit Namen ändern. Ja ich könnte sie auch ins Web-Verzeichnis schieben.

      3. ja ich kann auf dem Server tun und lassen was ich möchte 😉

      4. das mit der Batch funkt, wollte es aber alles in LC haben.

      • #23786
        Torsten
        Teilnehmer

        1. es sind die Standalone Dateien die ich da hinauf lade

        Mmh, im ersten Beitrag hast Du was von runterladen geschrieben. Wie ist es genau, wie kommen die Dateien auf den Server und wie runter?

        3. ja ich kann auf dem Server tun und lassen was ich möchte 😉

        Könntest Du auch Livecode Server installieren?

        Happy Coding
        Torsten

    • #23804
      foto2004
      Teilnehmer

      Nun die Dateien schiebe ich per FTP von mir rauf, und in der Arbeit wollte ich sie wieder, wenn ich wieder was geändert habe, per ftp runter laden und das ganze User sicher (du kannst dir nicht vorstellen was die alles so anstellen) runterladen. Wie gesagt es ist ein einfaches Program um in einer Tabelle nach bestimmten Daten zu suchen und in einer gewissen Form auszugeben inclusive pdfs usw.

      ja ich könnte den LiveCode Server installieren nur arbeite ich zur Zeit noch mit der community von LC weil sich der umstieg noch nicht lohnt. Erst wen ich das andere Projekt in Angriff nehme werde ich es machen.

      Wie gesagt momentan mache ich es mit einer Batch Datei die ich über LC aufrufe.
      Wollte aber haben dass nicht immer die Konsole aufplopt wenn ich die Batch aufrufe.
      Deswegen dachte ich mir dass es ja mit „nur“ LC auch gehen könnte.

Ansicht von 18 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.