Мне нужен сервлет, чтобы возвращать файлы с серверов Amazon S3. Только сервер имеет учетные данные для доступа, ведро S3 не является общедоступным. Я не могу это изменить. Мне сказали использовать потоки данных, но они настолько медленны. Чтобы проверить, у меня есть небольшой проект с эскизами, и когда вы нажимаете на него, открывается новая вкладка с полным изображением. Изображение 5 МБ занимает около минуты, чтобы загрузить. Это медленно.Чтение сервлета от Amazon S3 настолько медленное
функция, которая считывает из S3 и возвращает поток данных:
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, я буду стараться, и если одобрит ответ работы по этой проблеме;) –
Я был в отпуске, жаль, что я так долго должен был ответить. Это не решило проблему, это даже немного медленнее с TransferManager. Проблема в том, что это вызов, который я не могу контролировать, он должен вызываться один раз в каждом файле и ждать, пока тот не закончит, чтобы запустить следующий, так что большая часть полезности TransferManager теряется. Thx в любом случае. –