Ist es möglich, eine txt / pdf / png-Datei in einer einzigen Aktion auf Amazon S3 hochzuladen und die hochgeladene Datei-URL als Antwort zu erhalten? Wenn ja, ist AWS Java SDK die richtige Bibliothek, die ich in meiner Java Struts2-Webanwendung hinzufügen muss.
Bitte schlagen Sie mir eine Lösung dafür vor.
java
amazon-s3
amazon-web-services
Sangram Anand
quelle
quelle
Antworten:
Um die Datei vor dem Hochladen zu veröffentlichen, können Sie folgende
#withCannedAcl
Methoden anwendenPutObjectRequest
:quelle
Nein, Sie können die URL nicht in einer einzigen Aktion erhalten, sondern in zwei :)
Zunächst müssen Sie die Datei möglicherweise vor dem Hochladen veröffentlichen, da es keinen Sinn macht, die URL abzurufen, auf die niemand zugreifen kann. Sie können dies tun, indem Sie die ACL so einstellen, wie es Michael Astreiko vorgeschlagen hat. Sie können die Ressourcen-URL entweder durch Aufrufen von
getResourceUrl
oder abrufengetUrl
.Hinweis 1: Der Unterschied zwischen
getResourceUrl
undgetUrl
besteht darin, dass getResourceUrl null ausgibt, wenn eine Ausnahme auftritt.Hinweis 2: Die
getUrl
Methode ist in der AmazonS3-Schnittstelle nicht definiert. Sie müssen das Objekt in AmazonS3Client umwandeln, wenn Sie den Standard-Builder verwenden.quelle
s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg")
die URL ohne einen Aufruf von AWS funktioniert.getResourceUrl
ist nicht in der neuesten SDK.s3Client.getUrl("your-bucket", "some-path/some-key.jpg").toString();
wird die öffentliche URL erhalten.Sie können es anhand des Buckets und des Dateinamens, den Sie in der Upload-Anfrage angegeben haben, selbst herausfinden.
zB wenn Ihr Bucket ist
mybucket
und Ihre Datei benannt istmyfilename
:Das
s3
Bit hängt davon ab, in welcher Region sich Ihr Bucket befindet. Zum Beispiel verwende ich die Region Südostasien, sodass meine URLs wie folgt lauten:quelle
Die Antworten von @hussachai und @Jeffrey Kemp sind ziemlich gut. Sie haben jedoch etwas gemeinsam: Die zurückgegebene URL ist im Stil eines virtuellen Hosts und nicht im Pfadstil. Weitere Informationen zum s3-URL-Stil finden Sie unter AWS S3-URL-Stile . Im Falle einiger Leute möchten Pfad Stil s3 URL generiert werden. Hier ist der Schritt. Grundsätzlich entspricht alles den Antworten von @hussachai und @Jeffrey Kemp, nur mit einer Änderung der Zeileneinstellung wie folgt:
Dies generiert eine URL wie: https://s3.us-west-2.amazonaws.com/mybucket/myfilename
quelle
Wenn Sie eine Verknüpfung über s3Client wünschen, können Sie diese ebenfalls verwenden.
quelle
ein bisschen alt, aber immer noch für alle, die in Zukunft darauf stoßen:
Sie können dies mit einer Zeile tun, vorausgesetzt, Sie haben bereits den CredentialProvider und den AmazonS3Client geschrieben.
es wird so aussehen:
und wenn Sie den CredentialProvider und den AmazonS3Client nicht geschrieben haben, fügen Sie sie einfach hinzu, bevor Sie die URL wie folgt erhalten:
quelle
Damit können Sie den Link der bereits hochgeladenen Datei zum S3-Bucket abrufen.
quelle