いてづきブログ

情シスでやってみたことの備忘録

ASP.NET MVCでAWSから画像取得

タイトル通り。
ControllerでAWS上の画像ファイルを取得して返すやり方。

検索すると結構海外でも同じようなところでハマっている模様。
フォーラムは基本英語ばっかりで読むのが辛いお・・・(´・ω・`)


アクセスキーは予めconfigに書いておく





AWS上のキーを引数として渡して取得する。

public ActionResult Image(string key)
{
ActionResult result;
try
{
string bucketName = "bucketname";
string AWSAccessKey = ConfigurationManager.AppSettings["AWSAccessKey"];
string AWSSecretKey = ConfigurationManager.AppSettings["AWSSecretKey"];
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSAccessKey, AWSSecretKey);

GetObjectRequest request = new GetObjectRequest().WithBucketName(bucketName).WithKey(key);
GetObjectResponse response = client.GetObject(request);
result = File(response.ResponseStream, "image/jpeg");
}
// AWSからの画像取得に失敗した場合
//catch (AmazonS3Exception amazonS3Exception)
//{
// result = Content("{success: false, error: \"An error occurred\"}");
//}
catch
{
result = Content("{success: false, error: \"An error occurred\"}");
}
return result;
}

実行すると取得された画像がブラウザに表示される。
取得できないとnullじゃなくて例外を飛ばすのでcatchする。
画像ファイルなかったりすると、画像が読み込めなかったアイコンが出る。

Googleもそうだったけど、取得できないと例外を飛ばして、中にエラーコードを書くのが一般的なのかなぁ?