Ich habe versucht, eine Datei von AWS S3 in meinen Java-Code zu lesen:
File file = new File("s3n://mybucket/myfile.txt");
FileInputStream fileInput = new FileInputStream(file);
Dann bekam ich einen Fehler:
java.io.FileNotFoundException: s3n:/mybucket/myfile.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
Gibt es eine Möglichkeit, eine Datei von AWS S3 zu öffnen/lesen? Vielen Dank!
@tedder42, gibt es eine API zur Verarbeitung der Daten, wenn der Objektinhalt eine E-Mail ist? Ich möchte den E-Mail-Inhalt erhalten, von, an usw
– Benutzer4458270
3. April 2017 um 11:17 Uhr
@edwiser Stellen Sie eine neue Frage und verlinken Sie sie hier – Sie benötigen weitere Informationen.
– Heuwender42
3. April 2017 um 19:55 Uhr
Scheint veraltet zu sein, Use AmazonS3 s3Client = AmazonS3ClientBuilder.standard().build()
– binär
7. März 2018 um 18:44 Uhr
Enigo
Im Jahr 2019 gibt es eine etwas optimalere Möglichkeit, eine Datei aus S3 zu lesen:
private final AmazonS3 amazonS3Client = AmazonS3ClientBuilder.standard().build();
private Collection<String> loadFileFromS3() {
try (final S3Object s3Object = amazonS3Client.getObject(BUCKET_NAME,
FILE_NAME);
final InputStreamReader streamReader = new InputStreamReader(s3Object.getObjectContent(), StandardCharsets.UTF_8);
final BufferedReader reader = new BufferedReader(streamReader)) {
return reader.lines().collect(Collectors.toSet());
} catch (final IOException e) {
log.error(e.getMessage(), e)
return Collections.emptySet();
}
}
Optimal in welcher Weise (gut zu klären)?. Dies führt dazu, dass alles in den Speicher gezogen wird und keine Streaming-Semantik verwendet wird (gut, wenn Sie kleine Dateien haben, schlecht, wenn Sie eine 100-GB-Datei haben).
– Pragmatischer Programmierer
23. April 2020 um 18:34 Uhr
Schritte zum Lesen der S3-Datei in Java können sein:
AmazonS3Client erstellen.
Erstellen Sie S3Object mit dem Bucket-Namen und -Schlüssel.
Erstellen Sie einen Pufferleser mit S3Object und lesen Sie die Datei Zeile für Zeile.
BufferedReader reader = new BufferedReader(new InputStreamReader(object.getObjectContent()));
String s = null;
while ((s = reader.readLine()) != null)
{
System.out.println(s);
//your business logic here
}
Danke.
Können wir auch verwenden software.amazon.awssdk:s3
//Assuming the credentials are read from Environment Variables, so no hardcoding here
S3Client client = S3Client.builder()
.region(regionSelected)
.build();
GetObjectRequest getObjectRequest = GetObjectRequest.builder()
.bucket(bucketName)
.key(fileName)
.build();
ResponseInputStream<GetObjectResponse> responseInputStream = client.getObject(getObjectRequest);
InputStream stream = new ByteArrayInputStream(responseInputStream.readAllBytes());
System.out.println("Content :"+ new String(responseInputStream.readAllBytes(), StandardCharsets.UTF_8));
George V. Reilly
Wenn der Inhalt der Datei eine Zeichenfolge ist, können Sie verwenden getObjectAsString. Andernfalls können Sie verwenden IOUtils.toByteArray an getObjectContent() um den Inhalt der Datei in ein Byte-Array einzulesen.
Offensichtlich werden diese am besten für kleine S3-Objekte verwendet, die leicht in den Speicher passen.
Ein … kreieren temporäre Datei in /tmp/{dein-s3-schlüssel} damit wir die heruntergeladene Datei in diese Datei einfügen können.
File file = new File(System.getProperty("java.io.tmpdir"), "your-s3-key");
try {
file.createNewFile(); // Create temporary file
} catch (IOException e) {
e.printStackTrace();
}
file.mkdirs(); // Create the directory of the temporary file
Dann laden wir die Datei von s3 mit herunter Transfer-Manager-Client
// Note that in this line the s3 file downloaded has been transferred in to the temporary file that we created
Download download = transferManagerClient.download(
new GetObjectRequest("your-s3-bucket-name", "your-s3-key"), file);
// This line blocks the thread until the download is finished
download.waitForCompletion();
Nachdem die s3-Datei nun erfolgreich in die übertragen wurde temporäre Datei die wir geschaffen haben. Wir können den InputStream der erhalten temporäre Datei.
InputStream input = new DataInputStream(new FileInputStream(file));
Weil die temporäre Datei wird nicht mehr benötigt, wir löschen es einfach.
file.delete();
9963700cookie-checkWie kann ich eine AWS S3-Datei mit Java lesen?yes