私はPlay Framework 2.6(Scala)とAlpakka AWS S3 Connectorを使用して、ファイルをS3バケットに非同期でアップロードします。私のコードは次のようになります:Play Framework 2.6 Alpakka S3ファイルアップロード
def richUpload(extension: String, checkFunction: (String, Option[String]) => Boolean, cannedAcl: CannedAcl, bucket: String) = userAction(parse.multipartFormData(handleFilePartAsFile)).async { implicit request =>
val s3Filename = request.user.get.id + "/" + java.util.UUID.randomUUID.toString + "." + extension
val fileOption = request.body.file("file").map {
case FilePart(key, filename, contentType, file) =>
Logger.info(s"key = ${key}, filename = ${filename}, contentType = ${contentType}, file = $file")
if(checkFunction(filename, contentType)) {
s3Service.uploadSink(s3Filename, cannedAcl, bucket).runWith(FileIO.fromPath(file.toPath))
} else {
throw new Exception("Upload failed")
}
}
fileOption match {
case Some(opt) => opt.map(o => Ok(s3Filename))
case _ => Future.successful(BadRequest("ERROR"))
}
}
これは動作しますが、S3にアップロードする前にファイル名を返します。しかし、私はS3にアップロードした後に価値を返すことを望んでいます。解決策はありますか?
また、S3に直接ファイルをアップロードして、進捗状況を正しく表示し、一時ディスクファイルを使用しないようにすることは可能ですか?
ありがとうございました! – cutoffurmind