Wie kann ich direkt aus dem Browser mit einer vordefinierten URL anstelle von Anmeldeinformationen auf AWS S3 hochladen?
Möchten wir, Javascript zu verwenden, AWS SDK zum hochladen von Dateien auf S3, aber ohne Verwendung von Anmeldeinformationen.
Das hochladen mit den Anmeldeinformationen funktioniert, aber wir nicht erzeugen können, ein AWS IAM-Benutzer für alle unsere app-Nutzer (oder sollte man?)
Daher, ähnlich wie mit BEKOMMEN, wir möchten, dass die server zum generieren einer pre-signed URL, schicken Sie es an den browser, und der browser hochladen, die URL.
Jedoch gibt es keine Beispiele auf, wie dies zu erreichen.
Auch, wenn die Einstellung nicht eine Berechtigung, auch vor dem upload auf S3-Anfragen, die SDK-Fehler mit
code: "CredentialsError"
message: "No credentials to load"
JS-SDK-docs erwähne dies, so scheint es, es wäre möglich:
Pre-signing a putObject (asynchronously)
var params = {Bucket: 'bucket', Key: 'key'};
s3.getSignedUrl('putObject', params, function (err, url) {
console.log('The URL is', url);
});
InformationsquelleAutor der Frage user2528332 | 2014-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ruhig die alte Frage, aber es half mir ein bisschen, um es endlich fertig.
Meine Lösung basiert auf PHP und JavaScript mit jQuery.
Habe ich die gesamte Lösung, schön verpackt in https://github.com/JoernBerkefeld/s3SignedUpload aber hier sind das wesentliche:
api.php:
bitte stellen Sie sicher, dass fügen Sie Benutzerauthentifizierung hinzu, zu Ihrem api.php. Sonst keiner kennt den Pfad zu dieser Datei hochladen von Dateien auf den Eimer.
credentials.inc.php:
client.js:
s3 cors-Einstellungen (PUT & OPTIONEN tatsächlich benötigt werden, aber nicht aktivieren Sie die OPTIONEN direkt...):
InformationsquelleAutor der Antwort Jörn Berkefeld
Im Projekt, auf was ich arbeite, jetzt habe ich Datei-Upload vom client direkt auf S3, in meinem Fall, es funktioniert in wenigen Schritten:
Es ist das Haupt-code-Teile: https://gist.github.com/zxbodya/3cdabd9172bcc89f8ac5
InformationsquelleAutor der Antwort Bogdan Savluk
Wenn du nicht mit jQuery, das ist die minimal-Sie müssen auf dem front-end:
Siehe Datei-Objekt docs: https://developer.mozilla.org/en-US/docs/Web/API/File
Dann können Sie fügen Sie Ihre upload-Fortschritt wie gewohnt:
InformationsquelleAutor der Antwort Scott Jungwirth
Könnte ich schlage vor, zwei Ansätze:
1 - Sie könnten erzeugen eine vorab unterzeichnete Formular in der app, eine Berechtigung
Siehe doc: http://docs.aws.amazon.com/AmazonS3/latest/dev/HTTPPOSTForms.html
2 - man kann Sie nutzen web-Identitätsverbund und die Nutzung der login mit google, facebook oder amazon:
Siehe doc: http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-configuring-wif.html
Spielplatz: http://aws.typepad.com/aws/2013/08/the-aws-web-identity-federation-playground.html
InformationsquelleAutor der Antwort Julio_AWS_DevRel
Ziehe ich diese sauberer Ansatz, über github:
Wenn Sie bereits eine presigned erzeugte URL für den browser, können Sie senden Sie einfach eine XHR-Anfrage mit, dass die URL und die Nutzlast, um den upload auf S3. Das SDK wäre nicht erforderlich, dies zu tun. Ein jQuery-Beispiel unten:
InformationsquelleAutor der Antwort user2528332
Bitte fügen Sie
ACL
undContentType
werde es machen, damit es funktioniert.InformationsquelleAutor der Antwort Ruta