【问题标题】:Retrieve binary data from S3 storage through AWS.NET in C#在 C# 中通过 AWS.NET 从 S3 存储中检索二进制数据
【发布时间】:2011-01-28 04:00:23
【问题描述】:

我已经测试了适用于 .NET 的 AWS 开发工具包中包含的大部分示例,它们都运行良好。

我可以在存储桶中放置对象、列表对象和删除对象,但是...假设我删除了原始文件并希望同步本地丢失的那些文件?

我想创建一个 GET 对象(通过键/名称和原因桶)。我可以找到对象,但是如何通过 API 从 S3 读取二进制数据?

我是否必须为此编写自己的 SOAP 包装器,或者“这里”是否有一些示例? :o)

希望有样品。它不必容忍异常等。我只需要查看连接、检索并将文件存储回我的 ASP.net 或 C# 项目的主要部分。

有人吗???

【问题讨论】:

  • 这个问题是不好的,还是世界上只有我一个人有这个想法?
  • 我应该关闭这个问题吗?

标签: c# sdk amazon-s3 amazon-web-services


【解决方案1】:

这是一个例子:

string bucketName = "bucket";
string key = "some/key/name.bin";
string dest = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "name.bin");

using (AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSAccessKeyID, AWSSecretAccessKeyID))
{
    GetObjectRequest getObjectRequest = new GetObjectRequest().WithBucketName(bucketName).WithKey(key);

    using (S3Response getObjectResponse = client.GetObject(getObjectRequest))
    {
        if (!File.Exists(dest))
        {
            using (Stream s = getObjectResponse.ResponseStream)
            {
                using (FileStream fs = new FileStream(dest, FileMode.Create, FileAccess.Write))
                {
                    byte[] data = new byte[32768];
                    int bytesRead = 0;
                    do
                    {
                        bytesRead = s.Read(data, 0, data.Length);
                        fs.Write(data, 0, bytesRead);
                    }
                    while (bytesRead > 0);
                    fs.Flush();
                }
            }
        }
    }
}

【讨论】:

  • 啊哈!谢谢!它看起来很简单,但我会尝试一下,如果可行,记得点击“已回答”。我会发布我的结果。关于“32Kb”字节数组,为什么这么大?它是 AWS 标准还是分配给缓冲区的更多/更少会对传输速度产生影响?
  • 这是他们在 AmazonS3_Sample 中使用的缓冲区,位于 AWS SDK for .NET 下载 aws.amazon.com/sdkfornet
  • 刚好奇又下载了SDK,好像我的版本是1.5,有点不一样,但还是包含了“读取对象”功能。现在我已经下载并安装了最新版本,并找到了与您提供的完全相同的示例。谢谢你的时间。将其标记为“THE”答案。 :o)
  • 很高兴我能帮上忙。您还应该感谢 Jonik 添加 amazon-web-services 标签。我有这个标签的 RSS 提要,所以在他编辑之前我从未见过它!
  • 当然,还要感谢 Jonik。下次我会添加标签,但对我来说,我不认为它是一个 web 服务问题,而更多的是作为 .net 问题的 SDK。 :o) 在这种情况下,真正的问题是“错误 60”...但是谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多