Upload von Dateien
Upload über die Weboberfläche
DaRUS - bzw. die darunter liegende Software Dataverse - bietet eine komfortable Web-Oberfläche um Datensätze anzulegen und Dateien hochzuladen, der sehr gut für Dateien bis zu 2 GB Größe funktioniert.
Nach dem Upload können weitere Informationen (Beschreibung, Tags, Ordnerstruktur) zu den Dateien hinzugefügt werden.
Upload über die API
Für Dateien bis zu etwa 100 GB kann die DaRUS-API genutzt werden. Dafür benötigen Sie einen API-Key und die ID des Datensatzes, dem die Datei hinzugefügt werden soll.
$API_TOKEN: Ihr API-Token, das Sie in ihrem User Account erzeugen können.
$SERVER_URL: https://darus.uni-stuttgart.de (Produktivsystem) oder https://demodarus.izus.uni-stuttgart.de (Testsystem)
$PERSISTENT_ID: ID des Datensatzes, zu finden innerhalb der URL der Datensatzseite (z.B. doi:10.18419/darus-444)
curl -H X-Dataverse-key:$API_TOKEN -X POST -F "file=@$FILENAME" -F 'jsonData={"description":"<description>","directoryLabel":"<directory>","categories":<categories>, "restrict":"false"}' "$SERVER_URL/api/datasets/:persistentId/add?persistentId=$PERSISTENT_ID"
Gleichzeitig können (aber müssen nicht) Informationen über die Datei übermittelt werden:
- <description>: Textuelle Beschreibung der Datei
- <directory>: Ergänzen einer Ordnerstruktur, z.B. /images/subdir
- <categories>: Liste von Tags, z.B. ["Data","Documentation", "Code"]
- mit "restrict":"true" kann eine Datei mit einem Zugriffsschutz versehen werden
Alternativ zur direkten Ansprache der API können auch Bibliotheken wie pyDataverse oder Tools wie die DaRUS-App genutzt werden.
Direkter Upload auf das Datenbackend
Um Timeouts des Dataverse-Servers komplett zu vermeiden, können sehr große Dateien auch direkt auf das S3-Backend hochgeladen werden. Voraussetzung dafür ist aber, dass der direct upload für das entsprechende Dataverse aktiviert ist. Bitte sprechen Sie ihren lokalen Administrator an, falls Sie sich nicht sicher sind.
Der Upload geschieht dann in drei Schritten:
$API_TOKEN: Ihr API-Token, das Sie in ihrem User Account erzeugen können.
$SERVER_URL: https://darus.uni-stuttgart.de (Produktivsystem) oder https://demodarus.izus.uni-stuttgart.de (Testsystem)
$PERSISTENT_ID: ID des Datensatzes, zu finden innerhalb der URL der Datensatzseite (z.B. doi:10.18419/darus-444)
$SIZE: Größe des Datensatzes in Byte, unter Linux ermittelbar mit ls -l <filename>
- One-Time-Upload-Url erzeugen:
curl -H "X-Dataverse-key: $API_TOKEN" -X GET "$SERVER_URL/api/datasets/:persistentId/uploadurls/?persistentId=$PERSISTENT_ID&size=$SIZE"
Aus der JSON-Antwort benötigt man im Folgenden die "url" und den "storageIdentifier". Falls die Datei größer ist als die Single-Part-Grenze, bis zu der eine Datei in einem Stück hochgeladen werden kann (aktuell 100 GB), werden mehr als eine "url" zurückgegeben und zusätzlich eine "complete"-URL, die nach dem Hochladen der Teildateien mit den zurückgelieferten eTags aufgerufen werden muss (Multi-Part-Upload) - Direkter Upload der Datei auf den S3:
curl -i -X PUT -H "x-amz-tagging:dv-state=temp" -T <path-to-file> "<url>"
Dadurch wird die Datei in Datenbackend hochgeladen, aber zunächst noch als temporär gekennzeichnet und noch nicht mit dem Datensatz verknüpft. Dieser Upload kann je nach Dateigröße lange dauern.
Multi-Part-Upload: Dieser Befehl muss bei großen Dateien für jede in 1. zurückgelieferte url mit einem Teilstück der Daten ausgeführt werden. (Zum Teilen der Datei können Sie z.B. den Linux-Command split verwenden.) Nach jedem Upload wird ein eTag zurückgeliefert. Alle diese eTags müssen zum Abschluss des Multi-Part-Uploads an die in 1. zurückgelieferte "complete"-URL gesendet werden.
curl -X PUT "$SERVER_URL/api/datasets/mpload?..." -d '{"1":"<eTag1 string>","2":"<eTag2 string>","3":"<eTag3 string>","4":"<eTag4 string>","5":"<eTag5 string>"}'
- Registrieren der Datei bei Dataverse:
curl -H "X-Dataverse-key: $API_TOKEN" -X POST -F 'jsonData={"description":"<description>", "storageIdentifier": "<storageIdentifier>", "fileName": "<filename>", "mimeType": "<mimeType>", "checksum": {"@type": "MD5", "@value": "<md5sum>"}}' "$SERVER_URL/api/datasets/:persistentId/add?persistentId=$PERSISTENT_ID"
Da die Dateiinformationen nicht mehr von Dataverse selber ermittelt werden können, müssen Sie nun als Metadaten mit übergeben werden:- <description>: textuelle Beschreibung der Datei
- <storageIdentifier>: Rückgabe beim Erzeugen der One-Time-Upload-URL
- <mimeType>: Dateityp der Datei als MIME-Type (Liste gängiger MIME-Types, vollständige Liste aller MIME-Types)
- <md5sum> md5Hash der Datei, bekommt man unter Linux
md5sum <filename>
Optional können Sie noch folgende weiteren Angaben zur Datei machen:
-
- "directoryLabel": "/foldername/subfolder" Pfadangabe zur Datei, falls die Datei innerhalb des Datensatzes ein einer bestimmten Ordnerstruktur angezeigt werden soll.
- "categories": [<category>], falls die Datei ein Tag der Kategorie <category> (z.B. Data, Code, Documentation) bekommen soll
- "restrict": "true", falls der Zugriff auf die Datei beschränkt werden soll
Weitere Informationen zum Upload per API finden Sie in den Dataverse-Guides.
Wem der manuelle Upload zu aufwändig ist, kann auch den DV-Uploader mit der Option -directupload nutzen:
Nutzung des DVUploader
Der Dataverse-Uploader ist ein Java-basiertes Kommandozeilen-Tool, das beim Upload insbesondere sehr vieler oder auch sehr großer Dateien hilft und auch den direkten Upload auf unser Datenbackend unterstützt. Es wird von der Dataverse-Community entwickelt und kann als JAR-File heruntergeladen werden.
Für die Nutzung muss ein API-Token erzeugt werden und die ID des Datensatzes bekannt sein, zu dem die Datei(en´) hochgeladen werden sollen.
java -jar DVUploader-v1.0.0.jar -server=<ServerUrl> -did=<Dataset DOI> -key=<User's API Key> <file or directory list>
<User's API Key>: Ihr API-Token, das Sie in ihrem User Account erzeugen können.
<ServerUrl>: https://darus.uni-stuttgart.de (Produktivsystem) oder https://demodarus.izus.uni-stuttgart.de (Testsystem)
<Dataset DOI>: ID des Datensatzes, zu finden innerhalb der URL der Datensatzseite (z.B. doi:10.18419/darus-444)
Für den direkten Upload auf das Datenbackend verwenden Sie zusätzlich noch die Option -directupload
java -jar DVUploader-v1.0.0.jar -server=<ServerUrl> -did=<Dataset DOI> -key=<User's API Key> -directupload <file or directory list>