#java #amazon-s3
#java #amazon-s3
Вопрос:
Я написал короткий тестовый код на Java для загрузки PDF-файла, сгенерированного в памяти. В этом тестовом коде я просто использую фиктивный массив байтов, но при реальном использовании я помещу сгенерированный PDF (максимум 2-3 страницы) в этот массив байтов. Все работает: файл загружается и устанавливаются разрешения.
Однако, поскольку я вернул PutObjectResult, мне было интересно, как я должен это проверить. Или достаточно поискать исключения AmazonClientException и AmazonServiceException?
Другими словами: Как проверить, что загрузка прошла успешно и не повредила мои данные?
String bucket = "mybucket.example.com";
String fileName = "2011/test/test.pdf";
AmazonS3 client = new AmazonS3Client(new BasicAWSCredentials(
"accessKey", "secretKey"));
byte[] contents = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
InputStream stream = new ByteArrayInputStream(contents);
ObjectMetadata meta = new ObjectMetadata();
meta.setContentLength(contents.length);
meta.setContentType("application/pdf");
PutObjectResult res = client.putObject(bucket, fileName, stream, meta);
client.setObjectAcl(bucket, fileName, CannedAccessControlList.PublicRead);
Ответ №1:
Я просмотрел исходный код AWS, отладил его и обнаружил следующее:
- Если MD5 не указан, он вычисляется (работает либо для реальных файлов, либо для InputStream)
- Когда загрузка завершена, сравниваются клиентская и серверная части md5, и если они отличаются, выдается исключение AmazonClientException. [строка 1188 из AmazonS3Client 1.19]
Другими словами, чтобы ответить на мой собственный вопрос, достаточно прослушать исключения, потому что также проверяется MD5 загруженных данных, поэтому, если имело место повреждение, будет вызвано исключение.
Исключения AmazonClientException и AmazonServiceException являются непроверенными исключениями, поэтому важно не забывать их прослушивать, поскольку компилятор не будет заставлять вас это делать.