質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.35%

AWSのS3とファイル(txt, jpg, zip)をやりとりしたいです。

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,095

short

score 13

こんにちは。
Visual Studio 2017 Communityを使ってプログラミングしています。
OSはWindows10です。

前提・実現したいこと

AWSのS3とファイル(txt, jpg, zip)をやりとりしたいです。

試したこと

AWSのアクセスキーとシークレットアクセスキーを用意しました。

https://dev.classmethod.jp/cloud/aws_s3_client_csharp/
を参考に、プロジェクトを作りました。

NuGetでAWSSDK2.3.55.2をインストールしました。

発生している問題・エラーメッセージ

(1)エラーメッセージ
TransferUtilityUploadRequestにWithBucketNameが含まれていないので参照が不足している。
ビルドできない。

(2)AWSのアクセスキーとシークレットアクセスキーの記述方法がわからない。

該当のソースコード

using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Transfer;
using System;
using System.IO;
using System.Text;

namespace ConsoleApp1
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.Write(GetServiceOutput(args));
            Console.Read();
        }

        public static string GetServiceOutput(string[] args)
        {
            StringBuilder sb = new StringBuilder(1024);
            using (StringWriter sr = new StringWriter(sb))
            {
                var s3 = AWSClientFactory.CreateAmazonS3Client(RegionEndpoint.APNortheast1); //一時証明書を用いない場合

                string bucketName = "mybucketname";
                string targetLocalFolder = @"C:\Users\username\Desktop\";
                string downloadObjectKey = @"sample.txt";
                string uploadObjectKey = @"sample.txt";
                long partSize = 1 * 1024 * 1024;  // 1MB
                int timeout = 5 * 60 * 1000; // 5min

                try
                {
                    // List Objects
                    var listObjectRequest = new ListObjectsRequest();
                    listObjectRequest.BucketName = bucketName;
                    var response = s3.ListObjects(listObjectRequest);

                    foreach (var item in response.S3Objects)
                    {
                        sr.WriteLine("Object Name: " + item.Key);
                    }

                    // Put Objects
                    using (TransferUtility transferUtility = new TransferUtility(s3))
                    {
                        TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()
                            .WithBucketName(bucketName)
                            .WithKey(uploadObjectKey)
                            .WithFilePath(targetLocalFolder + uploadObjectKey)
                            .WithPartSize(partSize)
                            .WithStorageClass(S3StorageClass.Standard)
                            .WithTimeout(timeout)
                            .WithSubscriber(UploadFileProgressCallback);

                        transferUtility.Upload(request);
                        sr.WriteLine("Upload Complete: " + uploadObjectKey);
                    }

                    //// Get Objects
                    //using (TransferUtility transferUtility = new TransferUtility(s3))
                    //{
                    //    TransferUtilityDownloadRequest downloadRequest = new TransferUtilityDownloadRequest()
                    //        .WithBucketName(bucketName)
                    //        .WithKey(downloadObjectKey)
                    //        .WithFilePath(targetLocalFolder + downloadObjectKey)
                    //        .WithTimeout(timeout)
                    //        .WithSubscriber(DownloadFileProgressCallback);

                    //    transferUtility.Download(downloadRequest);
                    //    sr.WriteLine("Download Complete: " + downloadObjectKey);
                    //}
                }
                catch (AmazonS3Exception ex)
                {
                    if (ex.ErrorCode != null && (ex.ErrorCode.Equals("InvalidAccessKeyId") ||
                        ex.ErrorCode.Equals("InvalidSecurity")))
                    {
                        sr.WriteLine("Please check the provided AWS Credentials.");
                        sr.WriteLine("If you haven't signed up for Amazon S3, please visit http://aws.amazon.com/s3");
                    }
                    else
                    {
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("Request ID: " + ex.RequestId);
                        //sr.WriteLine("XML: " + ex.XML);
                    }
                }
                sr.WriteLine("Press any key to continue...");
            }

            return sb.ToString();
        }

        static void DownloadFileProgressCallback(object sender, WriteObjectProgressArgs e)
        {
        }

        static void UploadFileProgressCallback(object sender, UploadProgressArgs e)
        {
        }

    }
}

補足情報(言語/FW/ツール等のバージョンなど)

Visual Studio 2017 Community 15.3.3
.NET Framework 4.7.02053
Windows10 home

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

こんにちは。

C# SDK の AmazonS3Clientにそのままアクセスキー、シークレット、リージョン指定情報を渡して生成できたと思います。
あとはClientに渡すリクエストオブジェクトにバケット名(ダウンロードの場合はファイルキーも)を渡せば取得できたと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る