Загрузка файла вершины: методы BodyHandler не работают


Я хочу загрузить аватары. Мои конечные точки устанавливаются с помощью OpenAPI3RouterFactory(файл api.yaml).

api.yaml:

#other endpoints

/api/v1/upload-avatar:
  post:
    summary: Uploading avatars endpoint
    operationId: upload-avatar
    tags:
      - sign up
      - registration

#other ones


HandlerVerticle.kt:

//OpenApi3Router is set
//other endpoints
routerFactory.addHandlerByOperationId("upload-avatar", BodyHandler.create().setDeleteUploadedFilesOnEnd(true).setUploadsDirectory("mp-upload").setMergeFormAttributes(true))
routerFactory.addHandlerByOperationId("upload-avatar", { routingContext -> 
        val fileUploadSet = routingContext.fileUploads()
        val fileUploadIterator = fileUploadSet.iterator()
        while (fileUploadIterator.hasNext()) {
            val fileUpload = fileUploadIterator.next()
            val uploadedFile = vertx.fileSystem().readFileBlocking(fileUpload.uploadedFileName())

            try {
                val fileName = URLDecoder.decode(fileUpload.fileName(), "UTF-8")
                vertx.fileSystem().writeFileBlocking(fileName , uploadedFile)
                routingContext.response().end()
            } catch (e: Exception) {
                e.printStackTrace()
            }


        }
})

//other routes

когда я загружаю изображение, оно загружается успешно, но на стороне сервера vertx создает неправильный каталог загрузки и не удаляет временные загруженные файлы. Может кто-нибудь мне помочь?

1 ответ

Решение

Не уверен, следует ли это считать ошибкой или чем-то преднамеренным, но...

OpenAPI3RouterFactoryImpl.getRouter() всегда переопределяет BodyHandler

Неважно, что вы установили там раньше.

Я открыл новый выпуск сейчас: https://github.com/vert-x3/vertx-web/issues/860

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