我正在使用swagger 2.0.X和akka-http。我想通过swagger用户界面上传文件,但不知道如何将其描述到代码中。我曾尝试使用多部分内容的请求体,但它不起作用
@POST
@Path("/photo/upload")
@Operation(
summary = "Upload photo",
parameters = Array(
new Parameter(
name = "doctype",
description = "HEADER, describes uploaded document type",
in = ParameterIn.HEADER,
required = true,
schema = new Schema(implementation = classOf[String])
)
),
requestBody = new RequestBody(
description = "file",
content =
Array(new Content(mediaType = "multipart/form-data", schema = new Schema(`type` = "string", format = "binary")))
)
)
def startPhotoUpload: Route = post {
headersMap { headers =>
fileUpload("filename") {
case (_, fileStream) =>
val is = fileStream.runWith(StreamConverters.asInputStream())
handleRequest(
documentUploadServiceActorProps,
SendPhotoToFurtherUpload(is, headers)
)
}
}
}
2条答案
按热度按时间bnl4lu3b1#
这是一个有趣的情况。Swagger specification有关于文件上传的信息。但是我找不到一种方法来编写代码,允许我使用multipart/form-data从Swagger UI上传文件。如果您更改
至
或者甚至更具体类型,如“image/png”
这个方法的缺点是
fileUpload
指令不能处理流,它需要多部分数据。你必须使用extractDataBytes
,如果你还需要文件元数据,它就不太好了,所以你需要以不同的方式提供信息cunj1qz12#
我曾尝试这样做,并取得了一些成功:
swagger-akka-http 2.x Set List of Objects in the response
主要的技巧是添加一个case类: