Amazonでのファイルの保存方法を見てみましょう。ファイルを直接アップロードしてディレクトリを作成できるバケットがあります。 アクセスには、 アクセスキーと秘密キーの 2つのキーが使用されます。これらは、別のプロファイルページで表示できます。
そのため、アプリケーションでファイルをアップロードし、ダウンロード済みのファイルを削除する機能を実現するタスクがあります。 新しいWindowsフォームプロジェクトを作成します。 NuGet Amazon SDKを使用して追加する
PM> Install-Package AWSSDK
2つのListBox'aをフォームに追加します。1つはバスケットのリストを表示し、2つ目は選択したバスケット内のファイルのリストを表示します。 リストを取得し、指定されたバスケットにファイルをダウンロードし、選択したファイルを削除するためのボタンも追加します。
キーを持つ行を追加する
string accessKey = "LASKDJFHGQPWOEIRUTY"; string secretKey = "laksdjfhgqpwoeirutyzmxncbv";
そして、バスケットのリストを取得するコードを検討してください。
private void btnGetBucket_Click(object sender, EventArgs e) { using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey)) { var list = client.ListBuckets(); foreach (var bucket in list.Buckets) { lbBuckets.Items.Add(bucket.BucketName); } } }
ご覧のとおり、複雑なことは何もありません。クライアントオブジェクトを作成し、目的のメソッドを呼び出します。 バスケットの名前に加えて、作成日に関する情報もあることに注意してください。
選択したごみ箱内のファイルとディレクトリを一覧表示するコード:
private void btnGetList_Click(object sender, EventArgs e) { using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey)) { if(lbBuckets.SelectedIndex < 0) return; var list = client.ListObjects( new ListObjectsRequest() { BucketName = lbBuckets.SelectedItem.ToString() }); foreach (var file in list.S3Objects) { lbFiles.Items.Add(file.Key); } } }
出力では、ファイルに対応する既製のS3Objectsのリストを取得します。 次の形式で未加工のXML応答を取得することもできます。
<?xml version="1.0" encoding="utf-16"?> <ListObjectsResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <RequestId>Id</RequestId> <AmazonId2>Id</AmazonId2> <Name>Name</Name> <Prefix /> <S3Objects> <Key>FileName</Key> <BucketName>BucketName</BucketName> <LastModified>, 20 2012 13:00:33 GMT</LastModified> <ETag>"tag"</ETag> <Size>0</Size> <Owner> <Id>OwnerId</Id> <DisplayName>OwnerName</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </S3Objects> <MaxKeys>1000</MaxKeys> <IsTruncated>false</IsTruncated> </ListObjectsResponse>
さて、ファイル送信コード:
private void btnUpload_Click(object sender, EventArgs e) { var dlg = new OpenFileDialog(); if(dlg.ShowDialog() == DialogResult.OK) { var stream = new FileStream(dlg.FileName, FileMode.Open); using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey)) { var request = new PutObjectRequest(); if (lbBuckets.SelectedIndex < 0) return; request .WithBucketName(lbBuckets.SelectedItem.ToString()) .WithCannedACL(S3CannedACL.PublicRead) .WithKey(Path.GetFileName(dlg.FileName)) .InputStream = stream; client.PutObject(request); } } }
ここでは、ダウンロードするバスケットにロードするバスケット、プライバシー設定を指定できます。 ファイルをゴミ箱ディレクトリにアップロードするには、ディレクトリ名をスラッシュでパスに追加します。 指定されたディレクトリが存在しない場合、作成されます。
さて、削除コード:
private void btnDelete_Click(object sender, EventArgs e) { using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey)) { if (lbFiles.SelectedIndex < 0) return; new DeleteObjectRequest() .WithBucketName(lbBuckets.SelectedItem.ToString()) .WithKey(lbFiles.SelectedItem.ToString()); } }
追加資料:
AWS SDK for .NETの使用開始
Gdownloadソースコード