有人知道怎么做因为我调查了,但我发现只有错误/不工作的答案我尝试了很多解决方案,但似乎是错误的,比如使用Chilkat目录,使用ArchiveTransferManager ...
Chilkat.Rest rest = new Chilkat.Rest();
bool bTls = true;
int port = 443;
bool bAutoReconnect = true;
bool success = rest.Connect("glacier.eu-west-1.amazonaws.com", port, bTls, bAutoReconnect);
Chilkat.AuthAws authAws = new Chilkat.AuthAws();
authAws.AccessKey = ;
authAws.SecretKey = ;
authAws.ServiceName = "glacier";
authAws.Region = "us-west-1";
success = rest.SetAuthAws(authAws);
rest.AddHeader("x-amz-glacier-version", "2012-06-01");
string filePath = "20190422.csv";
Chilkat.Crypt2 crypt = new Chilkat.Crypt2();
crypt.HashAlgorithm = "sha256-tree-hash";
crypt.EncodingMode = "hexlower";
string treeHashHex = crypt.HashFileENC(filePath);
rest.AddHeader("x-amz-sha256-tree-hash", treeHashHex);
crypt.HashAlgorithm = "sha256";
string linearHashHex = crypt.HashFileENC(filePath);
authAws.PrecomputedSha256 = linearHashHex;
rest.AddHeader("x-amz-archive-description", filePath);
Chilkat.Stream fileStream = new Chilkat.Stream();
fileStream.SourceFile = filePath;
string responseStr = rest.FullRequestStream("POST", "/682988997959/vaults/streamqueuesvault", fileStream);
if (rest.LastMethodSuccess != true)
{
Debug.WriteLine(rest.LastErrorText);
return;
}
int respStatusCode = rest.ResponseStatusCode;
if (respStatusCode >= 400)
{
Debug.WriteLine("Response Status Code = " + Convert.ToString(respStatusCode));
Debug.WriteLine("Response Header:");
Debug.WriteLine(rest.ResponseHeader);
Debug.WriteLine("Response Body:");
Debug.WriteLine(responseStr);
return;
}
Debug.WriteLine("response status code = " + Convert.ToString(respStatusCode));
string archiveId = rest.ResponseHdrByName("x-amz-archive-id");
Debug.WriteLine("x-amz-archive-id = " + archiveId);
string location = rest.ResponseHdrByName("Location");
Debug.WriteLine("Location = " + location);
以下是如何在控制台应用程序中使用c#将文件从本地计算机上传到s3冰川保险库的分步指南?首先,我想介绍一些将在解决方案中使用的基本背景信息。如果您对S3 Glacier很聪明,请随意跳过解决方案。
如果您已安装AWS SDK for .NET和VS,则可以使用download the Repo from Github。
qazxsw poi是亚马逊的低成本长期存储服务。
在冰川术语中,对象称为存档。存储存档的文件夹也称为存储库。它非常简单 - 来自Amazon S3 Glacier:
问:Amazon S3 Glacier中的数据是如何组织的?您将数据存储在Amazon S3 Glacier中作为存档。为每个存档分配一个唯一的存档ID,以后可用于检索数据。存档可以表示单个文件,也可以选择将要上载的多个文件组合为单个存档。您将存档上传到保管库。保管库是用于组织数据的归档集合。
将对象上载到S3 Glacier时,对象不会立即显示在Glacier控制台中。您的Glacier控制台每天刷新一次。
亚马逊建议您在开发与AWS服务接口的C#应用程序时使用AWS SDK for .NET。
在编码之前,请进入AWS控制台并创建S3 Glacier Vault名称“TestVault”。
在此解决方案(2019年4月)时,我建议您使用Visual Studio 2019.这些步骤与早期版本的Visual Studio类似。
我提供的代码直接来自Glacier FAQ。
视觉工作室准备就绪后,请按照以下步骤操作:
ConsoleApp9
将AWS SDK添加到您的项目中。单击工具菜单,选择Nuget包管理器,然后单击包管理器控制台。然后键入NuGet package manager command。
对于MAC,请使用Project-> Add Nuget Packages。搜索“AWSSDK.Glacier”并安装它。Install-Package AWSSDK
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Amazon.Glacier;
using Amazon.Glacier.Transfer;
using Amazon.Runtime;
namespace ConsoleApp9
{
class Program
{
static string vaultName = "TestVault";
static string archiveToUpload = "C:\\Windows\\Temp\\TEST-ARCHIVE.txt";
static void Main(string[] args)
{
try
{
var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USEast1);
// 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();
}
}
}
放到Glacier。您可以将文件放在任何您想要的位置,只需更新代码中的变量c:\Windows\Temp\Test-Archive.txt
即可反映位置。archiveToUpload
之后的行上更改AWS区域:try
var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.YOUR-REGION);
follow these steps on setting up authorization for the AWS SDK
只要您在步骤6中获得ID,您的文件就会成功存储在Glacier中。
希望这有助于您找到成功。
也许这会有所帮助
来源= AmazonS3Client S3Client = new AmazonS3Client (credentials,region);
// Create a client
AmazonS3Client client = new AmazonS3Client();
// Create a PutObject request
PutObjectRequest request = new PutObjectRequest
{
BucketName = "SampleBucket",
Key = "Item1",
FilePath = "contents.txt"
};
// Put object
PutObjectResponse response = client.PutObject(request);
确保您所在的地区一致。在以下代码中,“eu-west-1”用于Connect调用,但“us-west-1”用于authAws.Region。
https://docs.aws.amazon.com/mobile/sdkforxamarin/developerguide/s3-integration-lowlevelapi.html