Java
Scala
AWS
S3

【Scala】しょっちゅう忘れる、AWSのAPI(逆引き)Scala S3編【AWS】

More than 3 years have passed since last update.

※前提として、AWS SDK は入れておいてくださいね。↓とか
http://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk/1.6.8

PUT(ファイルアップロード)

val credentials = new BasicAWSCredentials(アクセスキーキー, シークレットキー)
val s3Client = new AmazonS3Client(credentials)
val localFilePath = "ローカルのファイルパス"
val s3BucketName = "バケット名"
val s3FilePath = "S3のアップロード先のパス"
val upReq = new PutObjectRequest(s3BucketName, s3FilePath, localFile)
s3Client.putObject(upReq)

LIST(リスティング)

val credentials = new BasicAWSCredentials(アクセスキーキー, シークレットキー)
val s3Client = new AmazonS3Client(credentials)

val s3BucketName = "バケット名"
val s3FilePath = "S3のディレクトリ"

//リスティングで多すぎる場合、マーカーを保持しておかないといけない。
var preNextMarker = ""
var nextMarker = ""
var flg = false

while(!flg){

    preNextMarker = nextMarker

    val listReq = new ListObjectsRequest()
    listReq.setPrefix(s3FilePath)
    listReq.setBucketName(s3BucketName)

      listReq.setMarker(nextMarker)

      val objectListing = s3Client.listObjects(listReq)
      val summary = objectListing.getObjectSummaries

    //Listが返ってくるので、ぐるぐるまわす。
    //ScalaのListではないので、注意
    (0 to summary.size - 1).foreach{s3Object =>
        val obj = summary.get(s3Object)
        //煮るなり焼くなり
        }
    //println("next marker : " + nextMarker)

      nextMarker = objectListing.getNextMarker

    //もう無ければマーカーはnullです。
      if(nextMarker == null) flg = true
}

GET(ファイルダウンロード)

    //バケット名
    val s3BucketName ="バケット名"
    //オブジェクトのパス
    val s3ObjectPath = "オブジェクトのパス"
    //ダウンロード先のパス(ローカル)
    val downloadPath = "ダウンロードパス"
    val downloadFile = new File(downloadPath)

    //ダウンロード中のパス
    val downloadingPath = downloadPath + ".tmp"
    val downloadingFile = new File(downloadingPath)

    val req = new GetObjectRequest(s3BucketName, s3ObjectPath)
    val tm = new TransferManager(s3Client)
    val s3Obj = s3Client.getObject(req)

    try {

      val totalWork =  s3Obj.getObjectMetadata().getContentLength()
      val download = tm.download(req, downloadingFile)

      var lastTransferred = 0L

      while (!download.isDone()) {
        val transferred = download.getProgress().getBytesTransferred()
        lastTransferred = transferred

        println(s"progress ${download.getProgress().getPercentTransferred()}%")

        Thread.sleep(100)
      }
      download.waitForCompletion()

    } finally {
      try {
        tm.shutdownNow()
      }

      //ファイルをリネーム
      downloadingFile.renameTo(downloadFile)

    }

アクセス権変更

全員に読み込みを許可

//putを参考にしてください。
...

//リクエストのメソッドチェーン。
val upReq = new PutObjectRequest(s3BucketName, s3FilePath, localFile).withCannedAcl(CannedAccessControlList.PublicRead)

s3Client.putObject(upReq)

まだ書きかけ