注意

本文档适用于 Ceph 的开发版本。

C# S3 示例

创建连接

这会创建一个连接,以便您可以与服务器交互。

using System;
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;

string accessKey = "put your access key here!";
string secretKey = "put your secret key here!";

AmazonS3Config config = new AmazonS3Config();
config.ServiceURL = "objects.dreamhost.com";

AmazonS3Client s3Client = new AmazonS3Client(
        accessKey,
        secretKey,
        config
        );

列出拥有的存储桶

这会获取您拥有的存储桶列表。它还会打印出每个存储桶的名称和创建日期。

ListBucketsResponse response = client.ListBuckets();
foreach (S3Bucket b in response.Buckets)
{
        Console.WriteLine("{0}\t{1}", b.BucketName, b.CreationDate);
}

输出将类似于

mahbuckat1   2011-04-21T18:05:39.000Z
mahbuckat2   2011-04-21T18:05:48.000Z
mahbuckat3   2011-04-21T18:07:18.000Z

创建存储桶

这将创建一个名为 my-new-bucket 的新存储桶

PutBucketRequest request = new PutBucketRequest();
request.BucketName = "my-new-bucket";
client.PutBucket(request);

列出存储桶的内容

这会获取存储桶中对象的列表。它还会打印出每个对象的名称、文件大小和上次修改日期。

ListObjectsRequest request = new ListObjectsRequest();
request.BucketName = "my-new-bucket";
ListObjectsResponse response = client.ListObjects(request);
foreach (S3Object o in response.S3Objects)
{
        Console.WriteLine("{0}\t{1}\t{2}", o.Key, o.Size, o.LastModified);
}

输出将类似于

myphoto1.jpg 251262  2011-08-08T21:35:48.000Z
myphoto2.jpg 262518  2011-08-08T21:38:01.000Z

删除存储桶

注意

存储桶必须为空!否则它将无法工作!

DeleteBucketRequest request = new DeleteBucketRequest();
request.BucketName = "my-new-bucket";
client.DeleteBucket(request);

强制删除非空存储桶

注意

不可用

创建对象

这会创建一个包含字符串 "Hello World!" 的文件 hello.txt

PutObjectRequest request = new PutObjectRequest();
request.BucketName  = "my-new-bucket";
request.Key         = "hello.txt";
request.ContentType = "text/plain";
request.ContentBody = "Hello World!";
client.PutObject(request);

更改对象的 ACL

这将使对象 hello.txt 公开可读,并使 secret_plans.txt 保持私有。

PutACLRequest request = new PutACLRequest();
request.BucketName = "my-new-bucket";
request.Key        = "hello.txt";
request.CannedACL  = S3CannedACL.PublicRead;
client.PutACL(request);

PutACLRequest request2 = new PutACLRequest();
request2.BucketName = "my-new-bucket";
request2.Key        = "secret_plans.txt";
request2.CannedACL  = S3CannedACL.Private;
client.PutACL(request2);

下载对象(到文件)

这会下载对象 perl_poetry.pdf 并将其保存在 C:\Users\larry\Documents

GetObjectRequest request = new GetObjectRequest();
request.BucketName = "my-new-bucket";
request.Key        = "perl_poetry.pdf";
GetObjectResponse response = client.GetObject(request);
response.WriteResponseStreamToFile("C:\\Users\\larry\\Documents\\perl_poetry.pdf");

删除对象

这会删除对象 goodbye.txt

DeleteObjectRequest request = new DeleteObjectRequest();
request.BucketName = "my-new-bucket";
request.Key        = "goodbye.txt";
client.DeleteObject(request);

生成对象下载 URL(签名和未签名)

这会为 hello.txt 生成一个未签名的下载 URL。这之所以有效,是因为我们通过在上面设置 ACL 使 hello.txt 变为公开。然后,这会为 secret_plans.txt 生成一个签名的下载 URL,该 URL 将在 1 小时内有效。签名的下载 URL 在该时间段内即使对象是私有的也会有效(时间段结束后,URL 将停止工作)。

注意

C# S3 库没有用于生成未签名 URL 的方法,因此以下示例仅显示生成已签名 URL。

GetPreSignedUrlRequest request = new GetPreSignedUrlRequest();
request.BucketName = "my-bucket-name";
request.Key        = "secret_plans.txt";
request.Expires    = DateTime.Now.AddHours(1);
request.Protocol   = Protocol.HTTP;
string url = client.GetPreSignedURL(request);
Console.WriteLine(url);

输出将类似于

http://objects.dreamhost.com/my-bucket-name/secret_plans.txt?Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX&Expires=1316027075&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXX

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入