Загрузка файла вершины: методы 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