从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");
有什么建议吗?
提前致谢
安东尼斯
最佳答案
您可以列出要下载的存储桶中的对象,并根据定义的规则过滤键。然后,您可以开始分段下载。
从存储桶中获取密钥:
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);
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;
}
过滤密钥后,您可以下载密钥列表的特定部分。