C# で S3 から圧縮ファイルをダウンロードする方法
はじめに
S3 から圧縮ファイルをダウンロードする方法についてまとめます。
今回はWindowsFormアプリケーションを使用しました。
S3に sample.zip を準備してダウンロードしました。
必要なもの
・Visual Studio 2017
Visual Studio のインストール | Microsoft Docs
・AWSSDK.S3
https://www.nuget.org/packages/AWSSDK.S3/
ソースコード
using System; using System.Windows.Forms; using Amazon.S3; using Amazon.S3.Transfer; namespace WindowsFormsApp3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void DownloadS3Object(string awsBucketName, string keyName) { AmazonS3Config amazonS3Config = new AmazonS3Config() { ServiceURL = "https://s3.amazonaws.com" }; AmazonS3Client s3Client = new AmazonS3Client("awsAccessKeyId", "awsSecretAccessKey", amazonS3Config); using (TransferUtility fileTransferUtility = new TransferUtility(s3Client)) { fileTransferUtility.Download(@"C:\temp\" + keyName, awsBucketName, keyName); } } private void Download_Click(object sender, EventArgs e) { string keyName = "sample.zip"; DownloadS3Object("awsBucketName", keyName); } } }
ダウンロードした圧縮ファイルを展開し、内容も問題ありませんでした。
不採用のソースコード
GetObjectRequestはダウンロードが出来ても展開はできませんでした。
using System; using System.Windows.Forms; using Amazon.S3; using Amazon.S3.Model; using System.Runtime.Remoting.MetadataServices; using System.IO; namespace WindowsFormsApp3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public Stream DownloadS3Object(string awsBucketName, string keyName) { AmazonS3Config amazonS3Config = new AmazonS3Config() { ServiceURL = "https://s3.amazonaws.com" }; AmazonS3Client s3Client = new AmazonS3Client("awsAccessKeyId", "awsSecretAccessKey", amazonS3Config); using (var client = s3Client) { Stream stream = new MemoryStream(); GetObjectRequest request = new GetObjectRequest { BucketName = awsBucketName, Key = keyName }; using (GetObjectResponse response = client.GetObject(request)) { response.ResponseStream.CopyTo(stream); } stream.Position = 0; return stream; } } private void Download_Click(object sender, EventArgs e) { string keyName = "sample.zip"; Stream stream = DownloadS3Object("awsBucketName", keyName); MetaData.SaveStreamToFile(stream, @"C:\temp\" + keyName); } } }
ダウンロードした圧縮ファイルを展開しようとするとエラーが発生します。