

 **此页面仅适用于使用文件库和 2012 年原始 REST API 的 Amazon Glacier 服务的现有客户。**

如果您正在寻找归档存储解决方案，建议使用 Amazon S3 中的 Amazon Glacier 存储类别 S3 Glacier Instant Retrieval、S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive。要了解有关这些存储选项的更多信息，请参阅 [Amazon Glacier 存储类别](https://aws.amazon.com/s3/storage-classes/glacier/)。

Amazon Glacier（最初基于保管库的独立服务）不再接受新客户。Amazon Glacier 是一项独立的服务 APIs ，拥有自己的服务，可将数据存储在文件库中，不同于亚马逊 S3 和 Amazon S3 Glacier 存储类别。在 Amazon Glacier 中，您现有的数据将确保安全，并且可以无限期地访问。无需进行迁移。对于低成本、长期的存档存储， AWS 建议[使用 Amazon S3 Glacier 存储类别，这些存储类别](https://aws.amazon.com/s3/storage-classes/glacier/)基于S3存储桶 APIs、完全 AWS 区域 可用性、更低的成本和 AWS 服务集成，可提供卓越的客户体验。如果您希望加强功能，可以考虑使用我们的 [AWS 将数据从 Amazon Glacier 文件库传输到 Amazon S3 Glacier 存储类别的解决方案指南](https://aws.amazon.com/solutions/guidance/data-transfer-from-amazon-s3-glacier-vaults-to-amazon-s3/)，迁移到 Amazon S3 Glacier 存储类别。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在单个操作中上传档案
<a name="uploading-archive-single-operation"></a>

如[在 Amazon Glacier 中上传档案](uploading-an-archive.md)中所述，您可以在单个操作中上传较小的档案。但是，我们鼓励 Amazon Glacier（Amazon Glacier）客户使用分段上传来上传大于 100 MB 的档案。

**Topics**
+ [使用单个操作上传档案 AWS Command Line Interface](uploading-an-archive-single-op-using-cli.md)
+ [使用单个操作上传档案 适用于 Java 的 AWS SDK](uploading-an-archive-single-op-using-java.md)
+ [使用 Amazon Glacier 适用于 .NET 的 AWS SDK 中的单一操作上传档案](uploading-an-archive-single-op-using-dotnet.md)
+ [使用 REST API 在单个操作中上传档案](uploading-an-archive-single-op-using-rest.md)

# 使用单个操作上传档案 AWS Command Line Interface
<a name="uploading-an-archive-single-op-using-cli"></a>

您可以使用 () 在 Amazon Glacier（亚马逊 Glacier）中 AWS Command Line Interface 上传档案。AWS CLI

**Topics**
+ [（先决条件）设置 AWS CLI](#Creating-Vaults-CLI-Setup)
+ [示例：使用上传档案 AWS CLI](#Uploading-Archives-CLI-Implementation)

## （先决条件）设置 AWS CLI
<a name="Creating-Vaults-CLI-Setup"></a>

1. 下载并配置 AWS CLI。有关说明，请参阅《AWS Command Line Interface 用户指南》**中的以下主题：

    [正在安装 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) 

   [正在配置 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

1. 在命令提示符下输入以下命令来验证您的 AWS CLI 设置。这些命令没有显式提供凭证，因此将使用默认配置文件的凭证。
   + 尝试使用 help 命令。

     ```
     aws help
     ```
   + 要获取已配置账户上 Amazon Glacier 文件库的列表，请使用 `list-vaults` 命令。*123456789012*用您的 AWS 账户 身份证替换。

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 要查看的当前配置数据 AWS CLI，请使用`aws configure list`命令。

     ```
     aws configure list
     ```

## 示例：使用上传档案 AWS CLI
<a name="Uploading-Archives-CLI-Implementation"></a>

要上传档案，必须创建文件库。有关如何创建文件库的更多信息，请参阅[在 Amazon Glacier 中创建文件库](creating-vaults.md)。

1. 使用 `upload-archive` 命令将档案添加到现有文件库。在下面的示例中，替换 `vault name` 和 `account ID`。在 `body` 参数中指定要上传的文件的路径。

   ```
   aws glacier upload-archive --vault-name awsexamplevault --account-id 123456789012 --body archive.zip
   ```

1.  预期输出：

   ```
   {
       "archiveId": "kKB7ymWJVpPSwhGP6ycSOAekp9ZYe_--zM_mw6k76ZFGEIWQX-ybtRDvc2VkPSDtfKmQrj0IRQLSGsNuDp-AJVlu2ccmDSyDUmZwKbwbpAdGATGDiB3hHO0bjbGehXTcApVud_wyDw",
       "checksum": "969fb39823836d81f0cc028195fcdbcbbe76cdde932d4646fa7de5f21e18aa67",
       "location": "/123456789012/vaults/awsexamplevault/archives/kKB7ymWJVpPSwhGP6ycSOAekp9ZYe_--zM_mw6k76ZFGEIWQX-ybtRDvc2VkPSDtfKmQrj0IRQLSGsNuDp-AJVlu2ccmDSyDUmZwKbwbpAdGATGDiB3hHO0bjbGehXTcApVud_wyDw"
   }
   ```

   完成后，该命令将输出档案 ID、校验和以及在 Amazon Glacier 中的位置。有关 upload-archive 命令的更多信息，请参阅《AWS CLI 命令参考》中的 [upload-archive](https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-archive.html)。**

# 使用单个操作上传档案 适用于 Java 的 AWS SDK
<a name="uploading-an-archive-single-op-using-java"></a>

适用于 Java 的 Amazon SDK APIs 提供的[高级版本和低级](using-aws-sdk.md)版本都提供了一种上传档案的方法。

**Topics**
+ [使用的高级别 API 上传档案 适用于 Java 的 AWS SDK](#uploading-an-archive-single-op-high-level-using-java)
+ [使用的低级 API 在单个操作中上传档案 适用于 Java 的 AWS SDK](#uploading-an-archive-single-op-low-level-using-java)

## 使用的高级别 API 上传档案 适用于 Java 的 AWS SDK
<a name="uploading-an-archive-single-op-high-level-using-java"></a>

该高级 API 的 `ArchiveTransferManager` 类提供了您可以用来将档案上传到文件库的 `upload` 方法。

 

**注意**  
您可以使用 `upload` 方法上传小型或大型档案。根据您要上传的档案大小，此方法会确定是在单个操作中上传档案，还是使用分段上传 API 分段上传档案。

### 示例：使用的高级别 API 上传档案 适用于 Java 的 AWS SDK
<a name="upload-archive-high-level-java-example"></a>

以下 Java 代码示例将档案上传到美国西部（俄勒冈州）区域（`us-west-2`）中的文件库（`examplevault`）。有关支持的 AWS 区域和终端节点的列表，请参阅[访问 Amazon Glacier](amazon-glacier-accessing.md)。

有关如何运行此示例的 step-by-step说明，请参阅[使用 Eclipse 运行 Amazon Glacier 的 Java 示例](using-aws-sdk-for-java.md#setting-up-and-testing-sdk-java)。您需要更新目标上传文件库名称和待上传文件名称旁显示的代码。

**Example**  

```
import java.io.File;
import java.io.IOException;
import java.util.Date;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.glacier.AmazonGlacierClient;
import com.amazonaws.services.glacier.transfer.ArchiveTransferManager;
import com.amazonaws.services.glacier.transfer.UploadResult;


public class ArchiveUploadHighLevel {
    public static String vaultName = "*** provide vault name ***";
    public static String archiveToUpload = "*** provide name of file to upload ***";
    
    public static AmazonGlacierClient client;
    
    public static void main(String[] args) throws IOException {
        
        
    	ProfileCredentialsProvider credentials = new ProfileCredentialsProvider();
    	
        client = new AmazonGlacierClient(credentials);
        client.setEndpoint("https://glacier.us-west-2.amazonaws.com/");

        try {
            ArchiveTransferManager atm = new ArchiveTransferManager(client, credentials);
            
            UploadResult result = atm.upload(vaultName, "my archive " + (new Date()), new File(archiveToUpload));
            System.out.println("Archive ID: " + result.getArchiveId());
            
        } catch (Exception e)
        {
            System.err.println(e);
        }
    }
}
```

## 使用的低级 API 在单个操作中上传档案 适用于 Java 的 AWS SDK
<a name="uploading-an-archive-single-op-low-level-using-java"></a>

该低级 API 为所有档案操作提供了方法。下面是使用 适用于 Java 的 AWS SDK上传档案的步骤。

 

1. 创建 `AmazonGlacierClient` 类（客户端）的实例。

   您需要指定要上传档案的 AWS 区域。您使用此客户端执行的所有操作都适用于该 AWS 区域。

1. 通过创建一个 `UploadArchiveRequest` 类的实例提供请求信息。

   除了您要上传的数据以外，您还需要提供有效载荷的校验和（SHA-256 树形哈希）、文件库名称、数据的内容长度和您的账户 ID。

   如果您不提供账户 ID，则系统会使用与您提供来对请求签名的证书相关联的账户 ID。有关更多信息，请参阅[适用于 Java 的 AWS SDK 与 Amazon Glacier 搭配使用](using-aws-sdk-for-java.md)。

1. 以参数形式提供请求对象，运行 `uploadArchive` 方法。

   作为响应，Amazon Glacier（Amazon Glacier）返回新上传的档案的档案 ID。

以下 Java 代码段说明了前面的步骤。

```
AmazonGlacierClient client;

UploadArchiveRequest request = new UploadArchiveRequest()
    .withVaultName("*** provide vault name ***")
    .withChecksum(checksum)
    .withBody(new ByteArrayInputStream(body))
    .withContentLength((long)body.length);

UploadArchiveResult uploadArchiveResult = client.uploadArchive(request);

System.out.println("Location (includes ArchiveID): " + uploadArchiveResult.getLocation());
```

### 示例：使用的低级 API 在单个操作中上传档案 适用于 Java 的 AWS SDK
<a name="uploding-single-archive-using-java-example"></a>

以下 Java 代码示例使用将档案上传 适用于 Java 的 AWS SDK 到文件库 (`examplevault`)。有关如何运行此示例的 step-by-step说明，请参阅[使用 Eclipse 运行 Amazon Glacier 的 Java 示例](using-aws-sdk-for-java.md#setting-up-and-testing-sdk-java)。您需要更新目标上传文件库名称和待上传文件名称旁显示的代码。

```
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.glacier.AmazonGlacierClient;
import com.amazonaws.services.glacier.TreeHashGenerator;
import com.amazonaws.services.glacier.model.UploadArchiveRequest;
import com.amazonaws.services.glacier.model.UploadArchiveResult;
public class ArchiveUploadLowLevel {

    public static String vaultName = "*** provide vault name ****";
    public static String archiveFilePath = "*** provide to file upload ****";
    public static AmazonGlacierClient client;
    
    public static void main(String[] args) throws IOException {
    	
    	ProfileCredentialsProvider credentials = new ProfileCredentialsProvider();

        client = new AmazonGlacierClient(credentials);
        client.setEndpoint("https://glacier.us-east-1.amazonaws.com/");

        try {
            // First open file and read.
            File file = new File(archiveFilePath);
            InputStream is = new FileInputStream(file); 
            byte[] body = new byte[(int) file.length()];
            is.read(body);
                                    
            // Send request.
            UploadArchiveRequest request = new UploadArchiveRequest()
                .withVaultName(vaultName)
                .withChecksum(TreeHashGenerator.calculateTreeHash(new File(archiveFilePath))) 
                .withBody(new ByteArrayInputStream(body))
                .withContentLength((long)body.length);
            
            UploadArchiveResult uploadArchiveResult = client.uploadArchive(request);
            
            System.out.println("ArchiveID: " + uploadArchiveResult.getArchiveId());
            
        } catch (Exception e)
        {
            System.err.println("Archive not uploaded.");
            System.err.println(e);
        }
    }
}
```

# 使用 Amazon Glacier 适用于 .NET 的 AWS SDK 中的单一操作上传档案
<a name="uploading-an-archive-single-op-using-dotnet"></a>

适用于.NET 的 Amazon SDK APIs 提供的[高级版本和低级](using-aws-sdk.md)版本都提供了一种在单个操作中上传档案的方法。

**Topics**
+ [使用的高级别 API 上传档案 适用于 .NET 的 AWS SDK](#uploading-an-archive-single-op-highlevel-using-dotnet)
+ [使用的低级 API 在单个操作中上传档案 适用于 .NET 的 AWS SDK](#uploading-an-archive-single-op-lowlevel-using-dotnet)

## 使用的高级别 API 上传档案 适用于 .NET 的 AWS SDK
<a name="uploading-an-archive-single-op-highlevel-using-dotnet"></a>

该高级 API 的 `ArchiveTransferManager` 类提供了您可以用来将档案上传到文件库的 `Upload` 方法。

**注意**  
您可以使用 `Upload` 方法上传小型或大型文件。根据您要上传的文件大小，此方法会确定是在单个操作中上传文件，还是使用分段上传 API 分段上传文件。

### 示例：使用的高级别 API 上传档案 适用于 .NET 的 AWS SDK
<a name="upload-archive-highlevel-any-size-dotnet"></a>

以下 C\$1 代码示例将档案上传到美国西部（俄勒冈州）区域中的文件库（`examplevault`）。

有关如何运行此示例的 step-by-step说明，请参阅[运行代码示例](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet)。您需要更新待上传文件名称旁所显示的代码。

**Example**  

```
using System;
using Amazon.Glacier;
using Amazon.Glacier.Transfer;
using Amazon.Runtime;

namespace glacier.amazon.com.rproxy.govskope.us.docsamples
{
  class ArchiveUploadHighLevel
  {
    static string vaultName = "examplevault"; 
    static string archiveToUpload = "*** Provide file name (with full path) to upload ***";

    public static void Main(string[] args)
    {
       try
      {
         var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USWest2);
         // Upload an archive.
         string archiveId = manager.Upload(vaultName, "upload archive test", archiveToUpload).ArchiveId;
         Console.WriteLine("Archive ID: (Copy and save this ID for use in other examples.) : {0}", archiveId);
         Console.WriteLine("To continue, press Enter"); 
         Console.ReadKey();
      }
      catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }
      catch (AmazonServiceException e) { Console.WriteLine(e.Message); }
      catch (Exception e) { Console.WriteLine(e.Message); }
      Console.WriteLine("To continue, press Enter");
      Console.ReadKey();
    }
  }
}
```

## 使用的低级 API 在单个操作中上传档案 适用于 .NET 的 AWS SDK
<a name="uploading-an-archive-single-op-lowlevel-using-dotnet"></a>

该低级 API 为所有档案操作提供了方法。下面是使用 适用于 .NET 的 AWS SDK上传档案的步骤。

 

1. 创建 `AmazonGlacierClient` 类（客户端）的实例。

   您需要指定要上传档案的 AWS 区域。您使用此客户端执行的所有操作都适用于该 AWS 区域。

1. 通过创建一个 `UploadArchiveRequest` 类的实例提供请求信息。

   除了您要上传的数据以外，您还需要提供有效载荷的校验和（SHA-256 树形哈希）、文件库名称和您的账户 ID。

   如果您不提供账户 ID，则系统会使用与您提供来对请求签名的证书相关联的账户 ID。有关更多信息，请参阅[将适用于 .NET 的 AWS SDK 与 Amazon Glacier 结合使用](using-aws-sdk-for-dot-net.md)。

1. 以参数形式提供请求对象，运行 `UploadArchive` 方法。

   作为响应，Amazon Glacier 返回新上传的档案的档案 ID。

### 示例：使用的低级 API 在单个操作中上传档案 适用于 .NET 的 AWS SDK
<a name="upload-archive-single-op-lowlevel-dotnet"></a>

以下 C\$1 代码示例说明了前面的步骤。该示例使用将档案上传 适用于 .NET 的 AWS SDK 到文件库 (`examplevault`)。

**注意**  
有关用于在单个请求中上传档案的底层 REST API 的信息，请参阅[上传档案（POST archive）](api-archive-post.md)。

有关如何运行此示例的 step-by-step说明，请参阅[运行代码示例](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet)。您需要更新待上传文件名称旁所显示的代码。

**Example**  

```
using System;
using System.IO;
using Amazon.Glacier;
using Amazon.Glacier.Model;
using Amazon.Runtime;

namespace glacier.amazon.com.rproxy.govskope.us.docsamples
{
  class ArchiveUploadSingleOpLowLevel
  {
    static string vaultName       = "examplevault";
    static string archiveToUpload = "*** Provide file name (with full path) to upload ***";

    public static void Main(string[] args)
    {
      AmazonGlacierClient client;
      try
      {
         using (client = new AmazonGlacierClient(Amazon.RegionEndpoint.USWest2))
        {
          Console.WriteLine("Uploading an archive.");
          string archiveId = UploadAnArchive(client);
          Console.WriteLine("Archive ID: {0}", archiveId);
        }
      }
      catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }
      catch (AmazonServiceException e) { Console.WriteLine(e.Message); }
      catch (Exception e) { Console.WriteLine(e.Message); }
      Console.WriteLine("To continue, press Enter");
      Console.ReadKey();
    }

    static string UploadAnArchive(AmazonGlacierClient client)
    {
      using (FileStream fileStream = new FileStream(archiveToUpload, FileMode.Open, FileAccess.Read))
      {
        string treeHash = TreeHashGenerator.CalculateTreeHash(fileStream);
        UploadArchiveRequest request = new UploadArchiveRequest()
        {
          VaultName = vaultName,
          Body = fileStream,
          Checksum = treeHash
        };
        UploadArchiveResponse response = client.UploadArchive(request);
        string archiveID = response.ArchiveId;
        return archiveID;
      }
    }
  }
}
```

# 使用 REST API 在单个操作中上传档案
<a name="uploading-an-archive-single-op-using-rest"></a>

您可以使用上传档案 API 调用在单个操作中上传档案。有关更多信息，请参阅[上传档案（POST archive）](api-archive-post.md)。