使用存储 class Glacier 访问 S3 对象
Accessing S3 Objects with storage class Glacier
我编写了一个 (java) 软件,它从 S3 存储桶下载对象(存档),在本地提取数据并对其进行操作。
几天前,我将 S3 中 "folder" 中所有对象的生命周期策略设置为在创建后 2 天自动移动到冰川,这样我就有时间在数据归档之前进行 DL 和提取数据。但是,以编程方式访问数据时,Amazon Web Services 会抛出错误
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: The operation is not valid for the object's storage class
我想这是因为对象的存储 类 已更新到 Glacier。
到目前为止,我已使用以下代码访问我的 S3 数据:
public static void downloadObjectFromBucket(String bucketName, String pathToObject, String objectName) throws IOException{
AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, pathToObject));
InputStream reader = new BufferedInputStream(object.getObjectContent());
File file = new File(objectName);
OutputStream writer = new BufferedOutputStream(new FileOutputStream(file));
int read = -1;
while ( ( read = reader.read() ) != -1 ) {
writer.write(read);
}
writer.flush();
writer.close();
reader.close();
}
我是否必须更新我的代码或更改 AWS 控制台中的某些设置?我不清楚,因为对象仍在 S3 中并且访问每个 S3 对象一直运行良好,直到几天前我调整了生命周期策略....
Amazon S3 生命周期策略 可用于将对象从 S3 存档到 Amazon Glacier。
归档后(如 Glacier
的存储 Class 所示),对象仍 "appears" 在 S3 中(它出现在列表中,您可以看到它的大小和元数据),但 对象的内容保存在 Glacier 中。因此,无法访问内容。
要检索 S3 中存储 Class 为 Glacier
的对象的内容,您需要 RestoreObject 将内容检索到 S3 中。这需要 3-5 个小时。您还指定了内容应在 S3 中保留多长时间的持续时间(存储空间 Class 为 Reduced Redundancy
)。恢复对象后,您可以检索对象的内容。
我编写了一个 (java) 软件,它从 S3 存储桶下载对象(存档),在本地提取数据并对其进行操作。 几天前,我将 S3 中 "folder" 中所有对象的生命周期策略设置为在创建后 2 天自动移动到冰川,这样我就有时间在数据归档之前进行 DL 和提取数据。但是,以编程方式访问数据时,Amazon Web Services 会抛出错误
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: The operation is not valid for the object's storage class
我想这是因为对象的存储 类 已更新到 Glacier。 到目前为止,我已使用以下代码访问我的 S3 数据:
public static void downloadObjectFromBucket(String bucketName, String pathToObject, String objectName) throws IOException{
AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, pathToObject));
InputStream reader = new BufferedInputStream(object.getObjectContent());
File file = new File(objectName);
OutputStream writer = new BufferedOutputStream(new FileOutputStream(file));
int read = -1;
while ( ( read = reader.read() ) != -1 ) {
writer.write(read);
}
writer.flush();
writer.close();
reader.close();
}
我是否必须更新我的代码或更改 AWS 控制台中的某些设置?我不清楚,因为对象仍在 S3 中并且访问每个 S3 对象一直运行良好,直到几天前我调整了生命周期策略....
Amazon S3 生命周期策略 可用于将对象从 S3 存档到 Amazon Glacier。
归档后(如 Glacier
的存储 Class 所示),对象仍 "appears" 在 S3 中(它出现在列表中,您可以看到它的大小和元数据),但 对象的内容保存在 Glacier 中。因此,无法访问内容。
要检索 S3 中存储 Class 为 Glacier
的对象的内容,您需要 RestoreObject 将内容检索到 S3 中。这需要 3-5 个小时。您还指定了内容应在 S3 中保留多长时间的持续时间(存储空间 Class 为 Reduced Redundancy
)。恢复对象后,您可以检索对象的内容。