玩转!上传文件并保存到AWS S3

4
我正在使用Play 2.3版本,想要将上传的文件存储到S3中,因此我使用了Play-S3模块。
然而,我陷入了困境,因为我需要使用这个模块创建一个BucketFile以便上传到S3,而且一个BucketFile是由内存中的Array[Byte]创建的。Play!body parser会给我提供一个临时的磁盘文件。那么,我该如何将这个文件传递给BucketFile?
以下是我的控制器Action:
def upload = Action.async(parse.multipartFormData) { implicit request =>
    request.body.file("file").map{ file =>
      implicit val credential = AwsCredentials.fromConfiguration
      val bucket = S3("bucketName")
      val result = bucket + BucketFile(file.filename, file.contentType.get, file.ref.file.toString.getBytes)
      result.map{ unit =>
        Ok("File uploaded")
      }
    }.getOrElse {
      Future.successful {
        Redirect(routes.Application.index).flashing(
          "error" -> "Missing file"
        )
      }
    }
  }

这段代码无法正常工作,因为file.ref.file.toString()并没有真正返回文件的字符串表示。

1个回答

1

导入以下内容:

import java.nio.file.{Paths, Files}

创建 Array[Byte] 的方法如下:
val byteArray = Files.readAllBytes(Paths.get(file.ref.file.getPath))

然后用以下方式上传:
BucketFile(file.filename, file.contentType.get, byteArray, None, None)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接