LoginSignup
32
32

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-12-12

※前提として、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)

まだ書きかけ

32
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
32