Scala 如何在akka http中上载文件10文件大小>100 KB
我有AKKKAHTTPServerVersion10.0,用于将请求文件从邮递员上传到另一个连接AmazonS3的服务 使用图像文件图像大小=275 KB,它有异常 akka.stream.impl.SubscriptionTimeoutException:子流源在5000毫秒内未具体化 使用小于20 KB的图像大小,它可以正常工作 为什么 这是我的密码Scala 如何在akka http中上载文件10文件大小>100 KB,scala,akka-stream,akka-http,Scala,Akka Stream,Akka Http,我有AKKKAHTTPServerVersion10.0,用于将请求文件从邮递员上传到另一个连接AmazonS3的服务 使用图像文件图像大小=275 KB,它有异常 akka.stream.impl.SubscriptionTimeoutException:子流源在5000毫秒内未具体化 使用小于20 KB的图像大小,它可以正常工作 为什么 这是我的密码 (post & entity(as[Multipart.FormData])) { (formData) =>
(post &
entity(as[Multipart.FormData])) { (formData) =>
val fileNamesFuture = formData.parts.mapAsync(1) { p =>
Future.successful(p.entity, p.name, p.filename)
}.runFold(List.empty[(BodyPartEntity, String, Option[String])])(_ :+ _)
val req = fileNamesFuture flatMap { a => createRequestUploadImage(a.find(x => x._2 == "image").get, Url, token) }
onComplete(req flatMap {
HttpService.response
}) {
case Success(data) =>
println(data)
complete("OK")
}}
提出请求方法
def createRequestUploadImage(file: (BodyPartEntity, String, Option[String]), url: String, token: Option[String] = None): Future[HttpRequest] = {
val formData =
Multipart.FormData(
Source.single(
Multipart.FormData.BodyPart(
"data",
file._1,
Map("filename" -> file._3.getOrElse("")))))
Marshal(formData).to[RequestEntity]
.map(e => HttpRequest(HttpMethods.POST, uri = url, entity = e)
.withHeaders(RawHeader("Authorization", token.getOrElse(""))))}
从其他服务上载后获取URL
def response(req: HttpRequest): Future[Response] = {
val connectionFlow: Flow[HttpRequest, HttpResponse, Future[Http.OutgoingConnection]] =
Http().outgoingConnection(host = req.uri.authority.host.address(), port = req.uri.effectivePort).async
for {
res <- Source.single(req).via(connectionFlow).runWith(Sink.head)
data <- Unmarshal(res.entity).to[String]
} yield (res, data)}
这对你有帮助
将其放入application.conf文件中
100m意味着100MB
akka.http.server.parsing.max-content-length = 100m
我使用toStrict,它对我有效,谢谢您的回答