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));
Ответы
Ответ 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)