メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

署名付き URL を使用したオブジェクトのアップロード(AWS SDK for .NET)

以下のタスクは、.NET クラスで、署名付き URL を使用して、オブジェクトをアップロードする手順を示しています。

オブジェクトのアップロード

1

AmazonS3 クラスのインスタンスを作成します。

これらの認証情報は、署名付き URL を生成するときに、認証用の署名を作成するのに使用されます。

2

AmazonS3.GetPreSignedURL メソッドを実行して、署名付き URL を生成します。

GetPreSignedUrlRequest クラスのインスタンスを作成して、バケット名、オブジェクトキー、および有効期日を指定します。この URL をオブジェクトのアップロードに使用する場合は、この URL の作成時に HTTP 動詞 PUT を指定する必要があります。

3

署名付き URL を利用できるすべてのユーザーが、オブジェクトをアップロードすることができます。署名付き URL を指定してオブジェクトをアップロードすることによって、HttpWebRequest クラスのインスタンスを作成することができます。

以下の C# コード例は、前述のタスクの例です。

Copy
IAmazonS3 client; client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1); // Generate a pre-signed URL. GetPreSignedUrlRequest request = new GetPreSignedUrlRequest { BucketName = bucketName, Key = objectKey, Verb = HttpVerb.PUT, Expires = DateTime.Now.AddMinutes(5) }; string url = null; url = s3Client.GetPreSignedURL(request); // Upload a file using the pre-signed URL. HttpWebRequest httpRequest = WebRequest.Create(url) as HttpWebRequest; httpRequest.Method = "PUT"; using (Stream dataStream = httpRequest.GetRequestStream()) { // Upload object. } HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse;

以下の C# コード例は、特定のオブジェクトの署名付き URL を生成し、この URL を使用してファイルをアップロードします。実際に動作するコードを作成、テストする方法については、「Amazon S3 .NET コード例の実行」を参照してください。

Copy
using System; using System.IO; using System.Net; using Amazon.S3; using Amazon.S3.Model; namespace s3.amazon.com.docsamples { class UploadObjectUsingPresignedURL { static IAmazonS3 s3Client; // File to upload. static string filePath = "*** Specify file to upload ***"; // Information to generate pre-signed object URL. static string bucketName = "*** Provide bucket name ***"; static string objectKey = "*** Provide object key for the new object ***"; public static void Main(string[] args) { try { using (s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) { string url = GeneratePreSignedURL(); UploadObject(url); } } catch (AmazonS3Exception amazonS3Exception) { if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) { Console.WriteLine("Check the provided AWS Credentials."); Console.WriteLine( "To sign up for service, go to http://aws.amazon.com/s3"); } else { Console.WriteLine( "Error occurred. Message:'{0}' when listing objects", amazonS3Exception.Message); } } catch (Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } static void UploadObject(string url) { HttpWebRequest httpRequest = WebRequest.Create(url) as HttpWebRequest; httpRequest.Method = "PUT"; using (Stream dataStream = httpRequest.GetRequestStream()) { byte[] buffer = new byte[8000]; using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0) { dataStream.Write(buffer, 0, bytesRead); } } } HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse; } static string GeneratePreSignedURL() { GetPreSignedUrlRequest request = new GetPreSignedUrlRequest { BucketName = bucketName, Key = objectKey, Verb = HttpVerb.PUT, Expires = DateTime.Now.AddMinutes(5) }; string url = null; url = s3Client.GetPreSignedURL(request); return url; } } }