Ich brauche ein Servlet, um Dateien von Amazon S3-Servern zurückzugeben. Nur der Server verfügt über die Anmeldeinformationen für den Zugriff. Der S3-Bucket ist nicht öffentlich. Ich kann das nicht ändern. Mir wurde gesagt, dass ich Datenströme benutzen soll, aber sie sind so langsam. Zum testen habe ich ein kleines Projekt mit Thumbnails und wenn man auf eines klickt öffnet sich ein neues Tab mit dem ganzen Bild. Ein 5 MB-Bild dauert etwa eine Minute, um geladen zu werden. Das langsam.Servlet Lesen von Amazon S3 so langsam
Die Funktion, die von S3 liest und gibt den Datenstrom:
public void downloadDirectlyFromS3(String s3Path, String fileName, HttpServletResponse response) {
AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
s3Client.setEndpoint(S3ENDPOINT);
S3Object s3object = s3Client.getObject(new GetObjectRequest(s3Path, fileName));
byte[] buffer = new byte[5 * 1024 * 1024];
try {
InputStream input = s3object.getObjectContent();
ServletOutputStream output = response.getOutputStream();
for (int length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
output.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Thx, ich werde es versuchen, die Antwort, wenn Werke für dieses Problem zu genehmigen;) –
Ich war in den Ferien, tut mir leid, dass ich so lange gebraucht habe, um noch einmal zu antworten. Es hat das Problem nicht gelöst, es ist sogar etwas langsamer mit TransferManager. Das Problem ist, dass es ein Anruf ist, den ich nicht kontrollieren kann, er muss einmal jede Datei aufgerufen werden und warten bis dieser beendet ist, um den nächsten zu starten, so dass die meiste Nützlichkeit des TransferManagers verloren geht. Thx sowieso. –