2016-05-13 4 views
2

Ich entwickle eine API für die mobilen Plattformen zum Hochladen von Dokumenten. Der Prozess besteht aus 3 Schritten:Wie lade ich amazon s3 mit einem vorzeichenbehafteten Token ein?

  1. rufen Sie die API auf, um einen vordefinierten Tokensatz zu erhalten.
  2. mit diesem Token-Set auf s3 hochladen.
  3. den Dokument-Entity mit der API erstellen aus Schritt der zurück Taste 2.

Ich habe Probleme mit Schritt 2 Unten ist der curl Befehl:

curl -F "key=<key>/${filename}" 
-F "AWSAccessKeyId=<...>" 
-F "success_action_status=201" 
-F "Policy=<...>" 
-F "Signature=<...>" 
-F "[email protected]/Users/boti/Desktop/BotondsPhoto.png" https://<bucket>.s3.amazonaws.com 

Der curl Befehl lädt die Datei und gibt ein xml zurück wie:

<?xml version="1.0" encoding="UTF-8"?> 
<PostResponse> 
    <Location>https://<...>.s3.amazonaws.com/3%2Fe055ff06-9938-4f5c-b5c4-7b6a6df34a6f%2F</Location> 
    <Bucket>...</Bucket> 
    <Key>3/e055ff06-9938-4f5c-b5c4-7b6a6df34a6f/</Key> 
    <ETag>"cccc1defcab53079456f245b8a1e1d2d"</ETag> 
</PostResponse> 

Das Problem ist mit dem zurückgegebenen Schlüssel. Der letzte Teil $ {filename} nach dem Schrägstrich sollte durch den Dateinamen ersetzt worden sein. Es sollte so etwas wie sein:

<Key><key>/Toptal Photo.png</Key> 

Irgendwelche Ideen?

Antwort

0

ich es herausgefunden, dass das $ -Zeichen in der curl Befehl entwertet werden müssen:

curl -F "key=<key>/\${filename}" \ 
-F "AWSAccessKeyId=<...>" \ 
-F "success_action_status=201" \ 
-F "Policy=<...>" \ 
-F "Signature=<...>" \ 
-F "[email protected]/Users/boti/Desktop/BotondsPhoto.png" https://<bucket>.s3.amazonaws.com