Amazon S3を.Netアプリケーションに統合します

最近、アプリケーションでクラウドストレージを使用するという課題に直面しました。 以前にこのようなものに遭遇することなく、私はこのタスクに時間がかかると思いました。 しかし、驚いたことに、相互作用のための非常に便利なツールがすでに開発されています。 これらの使用例は、このトピックで説明されています。



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ソースコード



All Articles