※前提として、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)
まだ書きかけ