我使用Play Framework 2.6(Scala)和Alpakka AWS S3连接器将文件异步上载到S3 bucket。我的代码如下所示:
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,正确显示进度,并且不使用临时磁盘文件?
您需要翻转您的源和汇来获得您感兴趣的物化值。您有:
将来[IOResult]
。未来[MultipartUploadResult]
的接收器。您对后者感兴趣,但在您的代码中使用的是前者。这是因为runwith
函数始终保持作为参数传递的stage的物化值。
下面的示例片段中的类型应该说明这一点:
val fileSource: Source[ByteString, Future[IOResult]] = ???
val s3Sink : Sink [ByteString, Future[MultipartUploadResult]] = ???
val m1: Future[IOResult] = s3Sink.runWith(fileSource)
val m2: Future[MultipartUploadResult] = fileSource.runWith(s3Sink)
获得future[MultipartUploadResult]
后,可以以相同的方式对其map
并访问location
字段以获取文件的URI,例如:
val location: URI = fileSource.runWith(s3Sink).map(_.location)
本文向大家介绍详解SpringBoot文件上传下载和多文件上传(图文),包括了详解SpringBoot文件上传下载和多文件上传(图文)的使用技巧和注意事项,需要的朋友参考一下 最近在学习SpringBoot,以下是最近学习整理的实现文件上传下载的Java代码: 1、开发环境: IDEA15+ Maven+JDK1.8 2、新建一个maven工程: 3、工程框架 4、pom.xml文件依赖项
问题内容: 我需要处理分散在各个目录中的多个文件。我想将所有这些加载到单个RDD中,然后在其上执行map / reduce。我看到SparkContext能够使用通配符从单个目录加载多个文件。我不确定如何从多个文件夹加载文件。 以下代码段失败: 这在第三个循环中失败,并显示以下错误消息: 鉴于我仅提供了两个参数,所以这很奇怪。任何指针表示赞赏。 问题答案: 措辞如何呢? 在Scala中,有两种变体
本文向大家介绍Jsp+Servlet实现文件上传下载 文件上传(一),包括了Jsp+Servlet实现文件上传下载 文件上传(一)的使用技巧和注意事项,需要的朋友参考一下 文件上传和下载功能是Java Web必备技能,很实用。 本文使用的是Apache下的著名的文件上传组件 org.apache.commons.fileupload 实现 下面结合最近看到的一些资料以及自己的尝试,先写第一篇文件上
在Yii里上传文件通常使用 yii\web\UploadedFile 类, 它把每个上传的文件封装成 UploadedFile 对象。 结合 yii\widgets\ActiveForm 和 models,你可以轻松实现安全的上传文件机制。 创建模型 和普通的文本输入框类似,当要上传一个文件时,你需要创建一个模型类并且用其中的某个属性来接收上传的文件实例。 你还需要声明一条验证规则以验证上传的文件
大多数的 Web 应用都不可避免的,会涉及到文件上传。文件上传,不过是一种适配 HTTP 输入流的方式。 为此,Nutz.Mvc 内置了一个专门处理文件上传的适配器 org.nutz.mvc.upload.UploadAdaptor 这个适配器专门解析形式为 <form target="hideWin" enctype="multipart/form-data" method="post">
哦,上传文件可是个经典的好问题了。文件上传的基本概念实际上非常简单, 他基本是这样工作的: 一个 <form> 标签被标记有 enctype=multipart/form-data ,并且 在里面包含一个 <input type=file> 标签。 服务端应用通过请求对象上的 files 字典访问文件。 使用文件的 save() 方法将文件永久地 保存在文件系统上的某处。 一点点介绍 让我们建立一
Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据,每面数据的条数 属性 count:对象总数 num_pages:页面总数 page_range:页码列表,从1开始,例如[1, 2, 3, 4] 方法 page(num):下标以1开始,如果提供的页码不存在
SDK 详细代码可参考sdk-java模块代码,位于单元测试文件中 /** * 上传文件,读取本地文件 * * @throws IOException */ @Test public void testUpload() throws IOException { FileUploadRequest request = new F