I want send a filepart image with Vertx, I want replicate this case in code like Postman

PostmanExample

  fun sendFileToMatch(path:String){
    val client = WebClient.create(vertx);
    var form = MultipartForm.create()
      .binaryFileUpload("image","imageName" , path, "image/jpeg")

    client.post(8888, "localhost", "/search?")
      .putHeader("content-type", "multipart/form-data")
      .sendMultipartForm(form) { }
  }

when I run the code show bad request I have put exactly key "image" and send filepart image

1 ответ

Решение

TL;DR - ваш клиентский код в порядке.

Единственная подозрительная часть - это path сам, поскольку вы не указываете, как именно вы его получаете в своем коде, и тот факт, что вы не указали, как вы обрабатываете ответ от сервера: вы просто делаете {} в вашем примере

Вот полностью рабочий пример, на который вы можете сослаться:

        val vertx = Vertx.vertx()

    val router = Router.router(vertx)

    router.route().handler(BodyHandler.create());
    router.post("/search").handler {
        val uploads: Set<FileUpload> = it.fileUploads()

        uploads.forEach { upload ->
            println(upload.name()) // "image"
            println(upload.fileName()) // "imageName"
            println(upload.size()) // 42537
        }

        it.response().end("OK!")
    }

    vertx.createHttpServer().requestHandler(router)
            .listen(8888)

    // We read the PNG file from /resources
    val path = object {}.javaClass.getResource("5EWx9.png").path
    val form = MultipartForm.create()
            .binaryFileUpload("image","imageName" , path, "image/png")

    val client = WebClient.create(vertx);
    client.post(8888, "localhost", "/search?")
            .putHeader("content-type", "multipart/form-data")
            .sendMultipartForm(form) {
                if (it.succeeded()) {
                    println(it.result().bodyAsString()) // "OK!"
                }
                else {
                    println(it.cause())
                }
            }

В качестве файла для загрузки я использовал предоставленный вами PostmanExample, который представляет собой изображение PNG, которое я вставил в/resources каталог моего проекта.

Другие вопросы по тегам