scala - Swagger,如何添加文件上传
问题描述
我正在使用 swagger 2.0.X 和 akka-http。我想通过 swagger ui 上传文件,但不知道如何将其描述到代码中。我尝试将请求正文与多部分内容一起使用,但它不起作用
@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)
)
}
}
}
解决方案
这是一个很有趣的情况。Swagger 规范有关于文件上传的信息。但是我找不到一种方法来编写允许我使用 multipart/form-data 从 Swagger UI 上传文件的代码。如果你改变它会起作用
mediaType = "multipart/form-data"
至
mediaType = "application/octet-stream"
甚至更具体的类型,如“image/png”
这种方法的缺点是fileUpload
指令不适用于流,它需要多部分数据。您必须extractDataBytes
改用它,如果您还需要文件元数据,这不是很好,因此您需要以不同的方式提供该信息
推荐阅读
- sql - 如何根据条件使用 GROUP BY 和 MAX 或 SUM?
- odoo - 为什么使用 POS odoo 中的资产的开发人员模式出现错误“无法读取 null 的属性 'orderlines'”
- linux - chroot 后 qemu-x86_64-static Exec 格式错误
- linux-kernel - 将中等大小(>4K)的二进制信息从 Linux 内核提供给用户空间
- jquery - 语法正确的 jQuery 选择器只会显示空对象
- html - 您可以为同一个索引创建多个 URL 吗?
- javascript - 单击时从元素中删除活动类
- audio - 语音识别听方法不听
- grafana - Grafana auth.proxy 与 X-WEBAUTH-USER 不工作
- flutter - LateInitializationError:字段“initialPosition”尚未初始化