2016-12-18 2 views
1

Я новичок в AWS и сталкиваюсь с трудностями при загрузке файлов из определенной папки в AWS. Я знаю, что в AWS нет концепции папок.Загрузка содержимого определенной папки из AWS

Я могу загрузить файл, который находится там в корневом каталоге ведра с помощью ниже кода, но не с какой-либо конкретной папкой:

String fileName = "savings.pdf"; 
private static String bucketName = "XXXXXX.statement"; 
S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketName.concat("APL420/"), fileName)); 
final BufferedInputStream i = new BufferedInputStream(fetchFile.getObjectContent()); 
InputStream objectData = fetchFile.getObjectContent(); 
Files.copy(objectData, new File(fileName).toPath()); 
objectData.close(); 

Но не в состоянии загрузить все содержимое папки в ведро. Пожалуйста, предложите правильный путь.

Я попытался this ответ, но добавляя ничего bucketName не notworking:

S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketName + "APL420/", fileName)); 

ИЛИ

S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketName + "/APL420/", fileName)); 

не работает.

+0

Как насчет 'S3Object fetchFile = s3.getObject (новый GetObjectRequest (bucketName "/ APL420 /" + Filename))'? –

+0

Это я получаю «Указанный ключ не существует» –

ответ

1

Пожалуйста, не используйте слэш в конце, тогда он будет работать, если ключ существует. Служба S3 добавляет косую черту по умолчанию.

Отредактировано решение в соответствии с комментариями @Michael. Использование префикса в имени файла является правильным решением. Не в названии ведра.

S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketName, "APL420/" + fileName)); 

Добавление фрагмента из S3RequestEndpointResolver:

private String getPathStyleResourcePath() { 
    return bucketName + "/" + (key != null ? key : ""); 
} 
+0

Спасибо abhilekh! У меня создалось впечатление, что после чтения другого ответа мне нужно «/» в конце «APL420». Такая глупая ошибка. Спасибо, что сохранили мой день –

+0

** Если это работает, это является существенной ошибкой в ​​библиотеке. ** Не добавляйте префикс ключа («путь») к имени ведра - добавьте его к имени файла. 'Key =" APL420/"+ Filename" - это * правильное * решение, и да, для этого требуется конечная косая черта. Ответ на другой вопрос может работать в некоторых случаях, но в принципе также по той же причине неверен. –

0

getObject получает одиночный объект, хранящийся в Amazon S3 под указанным ведром и ключом. Возвращает null, если указанные ограничения не были выполнены.

Вместо этого вы можете взглянуть на интерфейс MultipleFileDownload в классе TransferManager.

+0

Любой сниффет кода о том, как загрузить несколько файлов из определенной папки с помощью MultipleFileDownload, было бы здорово только для начала работы –

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