AmazonS3, как проверить, прошла ли загрузка успешно?

#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 являются непроверенными исключениями, поэтому важно не забывать их прослушивать, поскольку компилятор не будет заставлять вас это делать.