Java Vertx从多部分表单数据中提取文件

问题描述

假设我有

Router router = Router.router(vertx);
router.route().handler(BodyHandler.create());
router.post("/").handler(ctx ->{
    //body..
}

我知道Set<FileUpload> set = ctx.fileUploads();会给我一组文件。我遇到的问题是我实际上没有得到文件-也就是说,如果sFileUpload,则不存在像InputStream f = s.getAsInputStream()这样的文件。在其他框架中,这是一个选择。有没有办法将文件作为输入流?

解决方法

过去,我使用两步方法来访问文件内容:

  1. 使用FileUpload.uploadedFileName()获取上载的本地存储文件的路径。
  2. 使用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
          });
    })