by shigemk2

当面は技術的なことしか書かない

AWScalaを使ってみたい

github.com

READMEに則った使い方。putでファイルをS3に転送して、転送データをもとにURLとかを取得している。

import awscala._, s3._

implicit val s3 = S3()

val buckets: Seq[Bucket] = s3.buckets
val bucket: Bucket = s3.createBucket("unique-name-xxx")
val summaries: Seq[S3ObjectSummary] = bucket.objectSummaries

bucket.put("sample.txt", new java.io.File("sample.txt"))

val s3obj: Option[S3Object] = bucket.getObject("sample.txt")

s3obj.foreach { obj =>
  obj.publicUrl // http://unique-name-xxx.s3.amazonaws.com/sample.txt
  obj.generatePresignedUrl(DateTime.now.plusMinutes(10)) // ?Expires=....
  bucket.delete(obj) // or obj.destroy()
}

雑な使い方。バケットにファイルをアップロードするサンプル。

import awscala._, s3._

val bucketName = "バケットネーム"
val accessKey = "アクセスキー"
val secretKey = "シークレットキー"
implicit val region = Region.どこか
implicit val s3 = S3(Credentials(accessKey, secretKey))
val bucket: Bucket = s3.bucket(bucketName).get
bucket.put("sample.txt", new java.io.File("sample.txt"))

ちなみにこのライブラリはACLまわりが実装されていないのでこの方法で画像をアップロードしてもブラウザから画像を見ることはできないし、大きなファイル(10GB以上とか)をダウンロードしたりアップロードしようとしたりしてもEntityTooLargeエラーだかなんだかになる。