Подтвердить что ты не робот

Amazon s3 загрузить файл тайм-аут

У меня есть JPG файл с 800 КБ. Я пытаюсь загрузить на S3 и продолжать получать ошибку тайм-аута. Не могли бы вы представить, что не так? 800 КБ довольно мало для загрузки.

Сообщение об ошибке: подключение вашего сокета к серверу не было прочитано или записано в течение периода ожидания. Свободные соединения будут закрыты.

Код состояния HTTP: 400

Код ошибки AWS: RequestTimeout

Long contentLength = null;
System.out.println("Uploading a new object to S3 from a file\n");
try {
    byte[] contentBytes = IOUtils.toByteArray(is);
    contentLength = Long.valueOf(contentBytes.length);
} catch (IOException e) {
    System.err.printf("Failed while reading bytes from %s", e.getMessage());
}

ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(contentLength);        

s3.putObject(new PutObjectRequest(bucketName, key, is, metadata));
4b9b3361

Ответ 1

Возможно ли, что IOUtils.toByteArray сбрасывает ваш входной поток, чтобы не было больше данных, которые будут прочитаны из него при вызове службы? В этом случае stream.reset() устранит проблему.

Но если вы просто загружаете файл (в отличие от произвольного InputStream), вы можете использовать более простую форму AmazonS3.putObject(), которая принимает файл, а затем вам не нужно будет вычислять длину содержимого на всех.

http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3.html#putObject(java.lang.String, java.lang.String, java.io.File)

Это будет автоматически повторять любые такие сетевые ошибки несколько раз. Вы можете настроить количество попыток, которые использует клиент, путем создания экземпляра объекта ClientConfiguration.

http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/ClientConfiguration.html#setMaxErrorRetry(int)