Jetzt verfügbar:  Berichte für DRACOONMehr Infos

Automatisierter Datei Download

Kommentare

8 Kommentare

  • Avatar
    Michael Netter

    Hallo Frau Kinas,

    können Sie genauer spezifizieren, was Sie mit einem automatisierten Download meinen und in welcher Programmiersprache Sie das umsetzen möchten?

    Prinzipiell können Sie sich ein(e) Anwendung/Skript schreiben, dass sich über die API anmeldet, die nodeIds der gewünschten Dateien ermittelt und diese anschließend herunterlädt. Unter https://dracoon.team/api finden Sie hierzu eine ausführliche API-Dokumentation.

    Viele Grüße

    Michael Netter

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Tatjana Kinas

    Hallo Herr Netter,

    damit meine ich, dass wir eine Lösung benötigen um Dateien automatisiert auf einen Server herunterzuladen. Wo diese weiterverarbeitet werden.

    Wir haben zur Zeit dafür einen FTP Server im Einsatz. Dieser soll für einige Prozesse durch die Cloud Lösung abgelöst werden.

    Am einfachsten wäre es wenn die Cloud auf dem Server als ein Netzlaufwerk eigerichtet wäre, dann könnten die bereits bestehenden Lösungen/Scripte weiterhin eingesetzt werden. Dis ist aber vermutlich per WebDAV oder Windows Cliet auf einem Server ohne Benutzeranmeldung nicht möglich oder?

    Die zweite Wahl fiel auf ein Script, das die API anspricht. Als Programmiersprache wäre hier PowerShell denkbar. 

    Eine Frage allgemein zur Anmeldung per Script: Gibt es eine Möglichkeit, das Passwort zu verschlüsseln? Sonst muss man ja ein Passwort im Klartext in einem Script hinterlegen.

    Mit freundlichen Grüßen

    Tatjana Kinas

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Christoph Otte

    Hallo Frau Kinas,

     

    wir hatten da auch bereits einen Nutzer mit ähnlichen Anforderungen und hatten unsere ersten Versuche der Umsetzung mit einem Powershell-Script versucht. Der Grund war, dass der Nutzer täglich eine Datei per Upload-Konto erhalten hat und diese automatisch herunterladen lassen will.

    Das geschriebene Script muss aktuell noch manuell ausgeführt werden, da wir uns noch keine Gedanken über die volle Automatisierung gemacht haben, bzw. unschlüssig waren, wann das Script getriggert werden soll. (Idee war: beim Rechnerstart oder eventuell bei Email-Eingang über die Benachrichtigungsfunktion des Upload-Kontos).

    Ansonsten führt das Script die Schritte aus, wie Herr Netter es bereits beschrieben hatte.

    1. Login
    2. ID's im Datenraum ermitteln
    3. Dateien herunterladen und lokal speichern
    4. heruntergeladene Dateien im Datenraum löschen
    5. Logout

    Wegen Passwort verschlüsseln hatten wir uns auch bereits Gedanken gemacht, wurde aber noch nicht umgesetzt.

    Das Script entstand unter Version 4.3 . Ich hoffe, dass es in der Zwischenzeit keine gravierende API-Änderungen gegeben hat. Zum Ausführen ist mindestens Powershell 3.0 erforderlich. Ich habe das Script nicht selber geschrieben und übernehme auch keine Verantwortung für die Richtigkeit oder Fehler die beim Ausführen auftreten könnten. Ansonsten würden wir uns über Feedback bzw. Verbesserungsvorschläge freuen.

    $dataspace="https://ihre.url.de"       # API-Test 4.3
    $path="/api/v4"          # Pfad zur API
    $api=""           # API-Aufruf, wird später ersetzt
    $user="benutzer@email.de"        # Login Nutzer
    $pwd="Passwort123"          # Login Passwort
    $authType="sql"          # Authentication Type sql (Email-Auth)
    $lang="1"          # Sprache (deutsch)
    $folder="123"          # Zielordner im Dataspace (ID vorher ermitteln)
    $token="0"          # token, wird später ermittelt
    $dlPath="c:\lokaler\Pfad\für\Download"       # ZielPfad FileDownload

    "-------------------------------------"
    "Test API (V4 per Powershell)"
    "-------------------------------------"

    # Ressourcen abfragen, braucht nur einmalig zu laufen, um AuthenticationType und Language zu ermitteln
    # $authType und $lang wurden danach als Variablen fest definiert - siehe oben
    <# Blockkommentar Anfang           
    "´nRessourcen abfragen"          
    $api="/auth/resources"        
    $uri = "$dataspace$path$api"
    $response = Invoke-RestMethod -URI $uri -Method GET -ContentType "application/json"
    Write-Host "Languages:"
    Write-Host $response.languages
    Write-Host "AuthTypes:"
    Write-Host $response.authTypes
    # Blockkommentar Ende #>

    # Login und Erzeugung eines Tokens (2h gültig)
    "`nLogin und Token erzeugen"
    $api="/auth/login"
    $uri = "$dataspace$path$api"
    $body = ConvertTo-Json @{ "login" = "$user"; "password" = "$pwd"; "language" = "$lang"; "authType" = "$authType" }
    $response = Invoke-WebRequest -URI $uri -Method Post -ContentType "application/json" -Body $body
    $response = ConvertFrom-Json $response.content
    $token = $response.token
    "Token: $token"

    # Token kann (solange noch gültig) in allen weiteren API-Requests verwendet werden
    $headers = @{'X-Sds-Auth-Token' = $token}

    # Struktur des Ordners mit ID=$folder abfragen und nur die Dateien anzeigen
    "`nDateien im Ordner ID=$folder anzeigen"
    $api="/nodes?depth_level=1&parent_id=$folder&filter=type%3Aeq%3Afile"
    $uri = "$dataspace$path$api"
    $response = Invoke-WebRequest -URI $uri -Method GET -ContentType "application/json" -Headers $headers
    $files = ConvertFrom-Json $response.Content
    "`nInhalt des zurueckgegebenen Objektes:"
     $files.items

    # Filenamen und zugehörige FileID's ermitteln
    "`nDateiname;ID"
    $files.items | foreach { $i = $_; $i.name + ";" + $i.id}

    # Download und Löschen aller Dateien im Ordner
    ### ID der zu herunterladenden Datei
    $files.items | foreach {      # für jedes Item in %files
     $i = $_       # bearbeitetes Item
     $fileId = $i.id      # zugehörige FileID
     $fileName = $i.name     # zugehöriger FileName

     # Download File
     $api="/nodes/files/$fileId/downloads" # zugehöriger API-Request
     $uri = "$dataspace$path$api"
     $response = Invoke-WebRequest -URI $uri -Method GET -ContentType "application/octet-stream" -Headers $headers -OutFile "$dlPath\$fileName"
     "Download abgeschlossen: $fileName"

     # Delete File
     $api="/nodes/$fileId"     # zugehöriger API-Request
     $uri = "$dataspace$path$api" 
     $response = Invoke-WebRequest -URI $uri -Method DELETE -ContentType "application/json" -Headers $headers
     "Datei geloescht: $fileName"

     }

    # Logout und Token ungültig machen
    "`nLogout und Token ungueltig machen"
    $api="/user/logout"
    $uri = "$dataspace$path$api"
    $response = Invoke-WebRequest -URI $uri -Method POST -ContentType "application/json" -Headers $headers

    "`nENDE"

     

    1
    Aktionen für Kommentare Permalink
  • Avatar
    Michael Netter

    Eine Möglichkeit Ihr Anliegen per Skript (bspw. in Powershell) umzusetzen wäre mit Duck (https://duck.sh/). Duck ist ein Dateiübertragungstool für die Kommandozeile und unterstützt DRACOON.

    Damit können Sie die gängigen Dateioperationen wie (Upload, Download, Löschen, Verzeichnis auflisten, etc.) auf DRACOON ausführen. Eine ausführliche Hilfeseite zu Duck finden Sie hier

    Hier zwei Beispiele, wie Sie Duck mit DRACOON nutzen können: 

    Zeigt alle Räume, Ordner und Dateien im Raum testroom an (Sie müssen die Platzhalter YOUR_USERNAME, YOUR_PASSWORD und YOUR_DRACOON_INSTANCE mit Ihren Werten ersetzen):

    duck --username YOUR_USERNAME --password YOUR_PASSWORD --list dracoon://YOUR_DRACOON_INSTANCE/testroom/

     

    Lädt alle Dateien im Raum testroom nach d:\ herunter:

    duck --username YOUR_USERNAME --password YOUR_PASSWORD --retry 3 --parallel 4 --existing skip --download dracoon://YOUR_DRACOON_INSTANCE/testroom/ d:\

     

    Im Moment benötigt Duck noch einen Username und ein Passwort. In einer der kommenden Versionen wird Duck auch OAuth unterstützten, so dass das Hinterlegen der Zugangsdaten im Klartext entfällt.

    1
    Aktionen für Kommentare Permalink
  • Avatar
    Markus Friedl

    Hallo,

    kurze Korrektur: Das "Skip" unter --existing skip muss klein geschrieben werden.

     

    Grüße,
    Markus

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Michael Netter

    Hallo Markus, 

    vielen Dank für den Hinweis. Ich habe den Befehl entsprechend angepasst.

    Viele Grüße

    Michael

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Markus Friedl

    Hallo Michael,

    kannst du mich hier bitte informieren, sobald die Authentifizierung per OAuth umgesetzt ist?

    Vielen Dank,
    Markus

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Michael Netter

    Hallo Markus,

    die Authentifizierung per OAuth ist in der aktuellen Version möglich. 

    Hierzu muss das aktuelle connection profile für OAuth heruntergeladen werden und unter %AppData%\Cyberduck\Profiles gespeichert werden. Anschließend kann OAuth mittels eigenem URI-Scheme wie folgt genutzt werden:

    duck --list dracoon-oauth://YOUR_DRACOON_INSTANCE/

    Viele Grüße

    Michael

    0
    Aktionen für Kommentare Permalink

Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.