Dateizugriff auf Server mit iOS

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • Dateizugriff auf Server mit iOS

    Hallo,

    ich steh grad ziemlich auf dem Schlauch ...

    Meine Aufgabe ist das Auslesen eines Verzeichnisses (später mehrere Verzeichnisse) von einem Server und anschließendes Laden der Files auf ein iPad.
    Der Zugriff und Laden sollen in einem Rutsch geschehen, also alle Files in einem Verzeichnis laden (Dateinamen sind beim Zugriff unbekannt)
    Der Zugriff muss gesichert sein (User/Pass) und die Übertragung auch (https?)

    Wie gehe ich das an?
    Von FTP wird abgeraten, weil nicht sicher genug.
    Unser Admin will etwas mit Dateifreigabe (UNC) machen, soweit ich gesehen habe wird dies von iOS jedoch nicht unterstützt?

    Ich könnte auch einen WebServer mit https-authentication challenge anfordern.
    Allerdings weiß ich hier nicht genau wie ich Verzeichnisse auslesen kann?
    Mein Plan ist erstmal eine URLConnection zum Server erstellen, dann die Authentifizierung beantworten und den Request ins Leere laufen lassen. Danach bin ich auf dem Server bekannt (?) und versuche mittels

    Quellcode

    1. NSFileManager.contentsOfDirectoryAtURL
    das Verzeichnis zu lesen und danach für jeden File

    Quellcode

    1. fileManager.copyItemAtURL: toURL:
    in mein iPad Verzeichnis zu bringen.
    Würde das gehen?
  • Moin,

    ich hatte mal eine ähnliche Aufgabe.
    Nur habe ich sämtliche Dateiaktionen (Serverseitig) auch vom Server abarbeiten lassen. Soll heißen das App hat nie die Verzeichnisse oder Dateien gesehen.
    Solche "Sucharbeiten" auf Server sollte aus Sicherheitsgründen nicht von aussen ausgeführt werden.

    Der Ablauf könnte dann so aussehen:

    (auf dem Server) PHP reicht völlig

    1. Authentifizierung des Users
    2. Sammeln der Dateien (rekursives durchforsten der geforderten Verzeichnisse)
    3. Ergebnisse bzw. die Dateipfade werden schön sauber in json o. xml geparkt
    4. Liste an App ausliefern

    so nun deine App:

    1. erhält als Meldung für erfolgreichen LogIn die Liste mit den Pfaden
    2. in einer Schleife die Files "ziehen" und speichern.


    Aber wenn du denn FileManager nutzen möchtest dann kommst du mit contentsOfDirectoryAtURL: nicht sehr weit (oder besser tief), besser für deine Aufgabe ist: enumeratorAtURL: .
  • Hey Kismet,

    danke für die Antwort!

    Die Pfade zu den auszulesenden Directories wären bekannt (vereinbart), nur die Filenames darin nicht.

    Würde denn ein Zugriff auf diese Art mit dem FileManager generell klappen?

    Und wie läuft es dann mit der Authentifizierung? Geht der "Trick" mit der NSULRConnection?
    Leider kenne ich mich da serverseitig wenig aus ...
    Wäre meine erste Authentifizierung auch noch gültig wenn ich die Files "ziehe".
    Kann sich der Server meine Authentifizierung merken (IP, oder Zeitraum) ?
    Cookies würde ich gerne vermeiden.
  • Yedy schrieb:

    Hey Kismet,

    danke für die Antwort!

    Die Pfade zu den auszulesenden Directories wären bekannt (vereinbart), nur die Filenames darin nicht.

    Würde denn ein Zugriff auf diese Art mit dem FileManager generell klappen?

    Und wie läuft es dann mit der Authentifizierung? Geht der "Trick" mit der NSULRConnection?
    Leider kenne ich mich da serverseitig wenig aus ...
    Wäre meine erste Authentifizierung auch noch gültig wenn ich die Files "ziehe".
    Kann sich der Server meine Authentifizierung merken (IP, oder Zeitraum) ?
    Cookies würde ich gerne vermeiden.
    Ja der Zugriff würde auch mit dem FileManager klappen. Ist halt nicht der normale Weg bei solchen Aufgaben - aber feel free :)

    Die Authentifizierung - hier müsste man sich mit dem WebAdmin erst mal einig werden welche Methode hier genutzt werden soll z.Bsp.: OAuth (?) in der Regel wird dann eine Session-Variable auf dem Server erzeugt die eine gewisse Lebenszeit (kommt drauf an wie lange die Sitzung laufen darf) hat. In den Session-Variable kann man so ziemlich alles speichern, also auch IP & Co.

    Cookies brauchen wir hier nicht :)))

    Wenn die Verzeichnisse bekannt sind ist die Arbeit natürlich etwas angenehmer.

    Der Vorschlag von gritsch ist auch nicht verkehrt. Zippen spart traffic....
  • hm ... ein zip?

    Also das Holen ist natürlich sehr geschmeidig!

    Nur wie parse ich ein zip?
    NSData könnten die einzelnen Sektionen bleiben, nur Filennames müssten auch extrahiert werden, anhand derer werden die Files sortiert etc.

    ... mal abgesehen vom vermutlichen Widerstand des ServerAdmins aufgrund zusätzlicher Arbeit ;)
  • Moin,

    da gritsch schon eine kleinen Snipe für die App geliefert hat, folgt nun ein PHP-Snipe für den Server ;)
    und Arbeit ist das nicht ;)


    <?php
    $dir = "a/directory/with/files/"
    $handle = opendir($dir);
    $file;

    while($file = readdir($handle)){
    // mach was cooles mit $file
    }

    // oder ganz einfach mit der zip.lib.php in 2 Zeilen

    $zipfile = new zipfile("archive.zip");
    $zipfile->addDirContent($dir);
    ?>
  • Vielen Dank für die super Tipps!

    Bin jetzt um einiges schlauer :thumbup:


    EDIT:
    So, nachdem das Projekt nun umgesetzt wurde hier noch schnell, für alle die auf der Suche hier landen, der Nachtrag zur Lösung meiner Frage :
    Ist möglich mit NSFileManager.contentsOfDirectoryAtURL auf ein Serververzeichnis zuzugreifen?
    Nein, das geht nicht!
    Es liefert den Fehler: CocoaError 262 = NSFileReadUnsupportedSchemeError.

    Die Lösung mit ZIP funktioniert sehr gut, auch wenn ich diesem Fall den Zugriff per XML gesteuert habe (aus Admin-Gründen ...)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Yedy ()