2017-01-11 4 views
0

Я пытаюсь скопировать данные из одной папки s3 в другую в пределах того же ведра. Я использую функцию copyObject из класса AmazonS3. Я не вижу никаких ошибок или исключений, и я тоже получаю результат. Но файл не копируется. Я бы, по крайней мере, за исключением некоторой ошибки, если есть какие-либо сбои. Что я делаю неправильно? Как узнать фактическую ошибку?Amazon S3 экземпляр объекта Java API

AmazonS3 s3client = новый AmazonS3Client (новый профильCredentialsProvider()); CopyObjectRequest copyObjRequest = new CopyObjectRequest ( sourceURI.getBucket(), sourceURI.getKey(), destinationURI.getBucket(), destinationURI.getKey());

CopyObjectResult copyResult = s3client.copyObject (copyObjRequest);

У меня есть правильные значения в исходном и конечном URI. Это из-за учетных данных? Если в случае, если он не работает из-за отсутствия учетных данных, я ожидаю ошибку от этого кода.

+0

Не видя кода нет никакого способа узнать. – stdunbar

+0

Я также обновил вопрос с кодом. – Passionate

+0

Как вы определяете, что целевого файла нет? – jarmod

ответ

1

Я подозреваю, что вы неправильно указали место назначения копии.

Конечный пункт - это полный ковш и ключ, например, если вы копируете собак/beagle.png в smalldogs/beagle.png, тогда недостаточно указать ключ назначения как smalldogs /. Так работают копии в обычной файловой системе, такой как NTFS или NFS, но не в том, как они работают в хранилище объектов. В результате это будет объект с именем smalldogs /, и он окажется папкой, но на самом деле это копия изображения бигля.

Итак, удалите созданный ошибочный объект, а затем укажите цель целиком и правильно.

Обратите внимание, что операция здесь копия. Если вы хотите «переместить», вам необходимо удалить источник позже.

Вот код, основанный на вашем, что прекрасно работает для меня, и приводит к правильному скопированного файла:

String bkt = "my-bucket"; 
String src = "dogs/beagle.png"; 
String dst = "smalldogs/beagle.png"; 

AmazonS3Client s3 = new AmazonS3Client(); 
CopyObjectRequest req = new CopyObjectRequest(bkt, src, bkt, dst); 
CopyObjectResult res = s3.copyObject(req); 
+0

Я пытаюсь напечатать исходное ведро, исходный ключ, целевое ведро и ключ назначения. Значения основного ведра и целевого ковша - это мое имя ковша. И мой исходный ключ - собаки/beagle.png. И мой ключ назначения был smalldogs /, и я пробовал с ключом назначения как smalldogs/beagle.png. Он также не копирует данные. И ошибок нет. – Passionate

+0

Если ошибка не была, то она * * * скопировала объект, как и в первый раз. Либо вы ошибаетесь, либо новый объект еще не полностью размножается, а ваш список не возвращал его (потому что S3 имеет в конечном итоге последовательный список после записи). – jarmod

+0

Даже после ожидания в течение 2 дней файл не отображается. Я тоже подозревал, что проблема с последовательностью. Это проблема в том, что я просто создаю ProfileCredentialsProvider и не имею никаких значений в нем? – Passionate

Смежные вопросы