问题描述
假设我有
Router router = Router.router(vertx);
router.route().handler(BodyHandler.create());
router.post("/").handler(ctx ->{
//body..
}
我知道Set<FileUpload> set = ctx.fileUploads();
会给我一组文件。我遇到的问题是我实际上没有得到文件-也就是说,如果s
是FileUpload
,则不存在像InputStream f = s.getAsInputStream()
这样的文件。在其他框架中,这是一个选择。有没有办法将文件作为输入流?
解决方法
过去,我使用两步方法来访问文件内容:
- 使用
FileUpload.uploadedFileName()
获取上载的本地存储文件的路径。 - 使用
FileSystem.readFile(String path)
的某种变体,它产生Buffer
类型,其中包含对原始字节的引用。
Rx的版本看起来像这样:
FileSystem fileSystem = ctx.vertx().fileSystem();
Router router = Router.router(vertx);
router.route().handler(BodyHandler.create());
router.post("/").handler(ctx -> {
ctx.fileUploads()
.map({ fileUpload ->
return fileSystem.rxReadFile(fileUpload.uploadedFileName())
.map({ buffer ->
return buffer.bytes; // <-- here's the binary content
});
})