【问题标题】:Get Glacier file status in AWS .NET SDK在 AWS .NET SDK 中获取 Glacier 文件状态
【发布时间】:2014-02-20 16:34:51
【问题描述】:

我在需要能够从 S3 下载一批文件的应用程序中使用 Amazon .NET SDK。其中一些文件可能已存档到 Glacier,在这种情况下,应用程序应为任何此类文件启动 RestoreObjectRequests,而不是从 S3 下载任何文件。以下是一些不起作用的解决方案:

  • ListObjectsResponse 中的 S3Object 有一个 StorageClass 属性,即 S3StorageClass.Glacier 用于 Glacier 启用的文件。但是,即使文件被临时恢复,S3Object 仍会继续具有该设置,因此这无济于事。

  • 我曾希望如果相关文件处于恢复过程中或临时恢复时,RestoreObjectResponse 会返回一些不同的结果,但它继续返回 0 / OK。

    李>
  • 我可以找到确定文件当前是否可用的唯一方法是尝试 GetObjectRequest 并查看它是否失败。我不想使用该解决方案,因为它可能涉及下载大量文件,然后才发现其中一个在 Glacier。

谁能建议另一个选项,让我知道是否所有图像都可用而无需下载它们?谢谢!

【问题讨论】:

    标签: .net amazon-web-services sdk amazon-s3 amazon-glacier


    【解决方案1】:

    好的,我有一个解决方案。可以只提取第一个字节,而不是从 S3 中提取完整文件:

    GetObjectRequest getObjectRequest = new GetObjectRequest();
    getObjectRequest.BucketName = bucketName;
    getObjectRequest.Key = key;
    getObjectRequest.ByteRange = new ByteRange(0, 1);
    
    try
    {
        s3Client.GetObject(getObjectRequest);
    }
    catch (AmazonS3Exception ex)
    {
        if (ex.ErrorCode == "InvalidObjectState")
        {
            // In Glacier, perform appropriate actions
        }
        else throw ex;
    }
    
    // If no exception, object has been restored
    

    我仍然认为他们最好在 Response 对象中提供一些让您知道状态而不是抛出异常的东西,但这种方法至少可以满足我的需要。

    【讨论】:

      【解决方案2】:

      你可以做一个 GetObjectMetadata 并且响应类包含 2 个相关属性:

      1. RestoreInProgress - 如果为 false,则恢复完成/失败。
      2. RestoreExpiration - 获取已恢复文件的到期日期(如果已恢复)。

      你可以试试这样的:

          GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest
          {
              BucketName = bucketName,
              Key = objectKey
          };
          GetObjectMetadataResponse response = await client.GetObjectMetadataAsync(metadataRequest);
          if (!response.RestoreInProgress)
          {
              return (response.RestoreExpiration.HasValue && response.RestoreExpiration.Value<DateTime.UtcNow);
          }
          return false;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-18
        • 2023-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多