首页 > 解决方案 > 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)
                )
            }
        }
    }

标签: scalaswaggerakkaswagger-ui

解决方案


这是一个很有趣的情况。Swagger 规范有关于文件上传的信息。但是我找不到一种方法来编写允许我使用 multipart/form-data 从 Swagger UI 上传文件的代码。如果你改变它会起作用

mediaType = "multipart/form-data"

mediaType = "application/octet-stream"

甚至更具体的类型,如“image/png”

这种方法的缺点是fileUpload指令不适用于流,它需要多部分数据。您必须extractDataBytes改用它,如果您还需要文件元数据,这不是很好,因此您需要以不同的方式提供该信息


推荐阅读