akka swagger ,如何添加文件上传

kd3sttzy  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(146)

我正在使用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)
                )
            }
        }
    }
bnl4lu3b

bnl4lu3b1#

这是一个有趣的情况。Swagger specification有关于文件上传的信息。但是我找不到一种方法来编写代码,允许我使用multipart/form-data从Swagger UI上传文件。如果您更改

mediaType = "multipart/form-data"

mediaType = "application/octet-stream"

或者甚至更具体类型,如“image/png”
这个方法的缺点是fileUpload指令不能处理流,它需要多部分数据。你必须使用extractDataBytes,如果你还需要文件元数据,它就不太好了,所以你需要以不同的方式提供信息

cunj1qz1

cunj1qz12#

我曾尝试这样做,并取得了一些成功:
swagger-akka-http 2.x Set List of Objects in the response
主要的技巧是添加一个case类:

//just for swagger
  case class FileUpload(@Schema(`type` = "string", format = "binary", description = "file") file: File)

相关问题