首页 文章

使用存储类Glacier访问S3对象

提问于
浏览
3

我写了一个(java)软件,它从S3存储桶下载对象(存档),在本地提取数据并对其进行操作 . 几天前,我将S3中“文件夹”中所有对象的生命周期策略设置为在创建后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对象一直工作得非常好,直到几天前我修改了生命周期策略....

1 回答

  • 2

    Amazon S3 lifecycle policy 可用于将S3中的对象归档到Amazon Glacier .

    归档时(由 Glacier 的存储类指示),对象仍然是"appears"在S3中(它出现在列表中,您可以看到它的大小和元数据)但是 the contents of the object is kept in Glacier . 因此,无法访问内容 .

    要使用 Glacier 的存储类检索S3中对象的内容,您需要RestoreObject将内容检索到S3 . 这需要3-5个小时 . 您还可以指定内容应保留在S3中的持续时间(其中将存储 Reduced Redundancy 的存储类) . 恢复对象后,您可以检索对象的内容 .

相关问题