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
          Administrator

            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
              Administrator

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

              • #23646
                Klaus Major
                Administrator

                  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
                              Administrator

                                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.