Несколько загрузок неизвестного количества файлов на S3 с JetS3t - PullRequest
2 голосов
/ 15 ноября 2010

из примеров кода JetS3t код, который следует: Что делать, если я не знаю, сколько файлов будет загружено с самого начала?Например, приложение с миниатюрами в S3 и клиентское приложение, которое пользователь прокручивает в списке миниатюр.

Загрузка объектов в локальные файлы

Многопоточные сервисы предоставляют метод для загрузкиобъекты за один раз, но чтобы использовать это, вы должны сначала где-то подготовиться, чтобы поместить данные, связанные с каждым объектом.Наиболее очевидное место для размещения этих данных - в файле, поэтому давайте рассмотрим пример загрузки данных объекта в файлы.Чтобы загрузить наши объекты в файлы, мы сначала должны создать класс DownloadPackage для каждого объекта.Этот класс представляет собой простой контейнер, который просто связывает объект с файлом, в который будут записаны данные объекта.Создайте DownloadPackage для каждого объекта, чтобы связать объект с выходным файлом.

 DownloadPackage[] downloadPackages = new DownloadPackage[5];
   downloadPackages[0] = new DownloadPackage(objects[0],
       new File(objects[0].getKey()));
   downloadPackages[1] = new DownloadPackage(objects[1],
       new File(objects[1].getKey()));
   downloadPackages[2] = new DownloadPackage(objects[2],
       new File(objects[2].getKey()));
   downloadPackages[3] = new DownloadPackage(objects[3],
       new File(objects[3].getKey()));
   downloadPackages[4] = new DownloadPackage(objects[4],
       new File(objects[4].getKey()));

   // Download the objects.
   simpleMulti.downloadObjects(bucket, downloadPackages);
   System.out.println("Downloaded objects to current working directory");

Есть предложения для этого случая?Заранее спасибо

Антонис

1 Ответ

0 голосов
/ 10 апреля 2011

Вы можете перечислить объекты в корзине, из которой вы загружаете файлы, и отфильтровать ключи в соответствии с определенными вами правилами.Затем вы можете начать многоэтапную загрузку.

получить ключи из корзины:

<br>
 public List getFilesList(String accessKey, String secretKey
            ,String bucketName ,String directoryPathRelativeToBucket) {
        List keys = new ArrayList();
        org.jets3t.service.model.S3Object[] objects = new org.jets3t.service.model.S3Object[]{};
        try {
            // Create a credentials object and service to access S3 account
            org.jets3t.service.security.AWSCredentials myCredentials =
                new org.jets3t.service.security.AWSCredentials(accessKey, secretKey);</p>

<code>        S3Service service = new RestS3Service(myCredentials);

        objects = service.listObjects(bucketName
                ,directoryPathRelativeToBucket, null);
        log.info("got bucket listing for bucket[" + bucketName + "]");
    } catch (S3ServiceException e) {
        log.error("Failed to get or object listing for bucket[" + bucketName + "] due to exception:", e);
    }

    for (org.jets3t.service.model.S3Object s3Object : objects) {
        if (s3Object.getKey().contains("$") == false) {
            keys.add(s3Object.getKey());
        }
    }
    return keys;
}

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

...