Amazon Web Services (AWS) S3 Java создает подкаталог (объект)
Я знаком с AWS Java SDK, я также попытался просмотреть соответствующий Javadoc, но я не мог понять, как создать подкаталог, т.е. объект каталога внутри ведра, и как я могу загружать в него файлы.
Предположим, что bucketName
и dirName
соответствуют уже существующему ведру (с открытым разрешением) и новому (объекту) директорию, который должен быть создан в ведре (т.е. bucketName/dirName/)
Я пробовал следующее:
AmazonS3Client s3 = new AmazonS3Client(
new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY));
s3.createBucket(bucketName + "/" + dirName); //throws exception
который выдает исключение во второй строке.
Короткий фрагмент, который создает подкаталог и загружает файлы в него, будет глубоко оценен.
Ответы
Ответ 1
В S3 нет "подкаталогов". Есть ведра и есть ключи внутри ведер.
Вы можете эмулировать традиционные каталоги, используя поиск в префиксах. Например, вы можете хранить следующие клавиши в ведре:
foo/bar1
foo/bar2
foo/bar3
blah/baz1
blah/baz2
а затем выполните поиск в префиксе foo/
, и вы вернетесь:
foo/bar1
foo/bar2
foo/bar3
Подробнее см. AmazonS3.listObjects
.
Обновление: Предполагая, что у вас уже есть существующее ведро, ключ под этим ведром будет содержать /
:
s3.putObject("someBucket", "foo/bar1", file1);
s3.putObject("someBucket", "foo/bar2", file2);
...
Затем вы можете перечислить все клавиши, начинающиеся с foo/
:
ObjectListing listing = s3.listObjects("someBucket", "foo/");
Ответ 2
S3 не видит каталоги традиционным способом, который мы делаем в наших операционных системах.
Вот как вы можете создать каталог:
public static void createFolder(String bucketName, String folderName, AmazonS3 client) {
// create meta-data for your folder and set content-length to 0
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(0);
// create empty content
InputStream emptyContent = new ByteArrayInputStream(new byte[0]);
// create a PutObjectRequest passing the folder name suffixed by /
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName,
folderName + SUFFIX, emptyContent, metadata);
// send request to S3 to create folder
client.putObject(putObjectRequest);
}
Как уже сообщал casablanca, вы можете загружать файлы в такие каталоги:
s3.putObject("someBucket", "foo/bar1", file1);
Прочтите весь учебник здесь, и самое главное, вы найдете информацию о том, как удалить каталоги.
Ответ 3
если вы хотите создать папку, тогда вам нужно использовать команду put, используя следующие ключи для создания folder1 в:
в корневой папке → папка1/папка1_ $папка $
в папке path2/folder3/- > folder2/folder3/folder1/folder1_ $folder $
Это всегда all_previous_folders/folderName/folderName_ $folder $