Amazon Web Services (AWS) S3 Java создает подкаталог (объект) - программирование
Подтвердить что ты не робот

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

который выдает исключение во второй строке.

Короткий фрагмент, который создает подкаталог и загружает файлы в него, будет глубоко оценен.

4b9b3361

Ответ 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 $