Vertx FileUpload单元测试

时间:2017-12-07 15:13:47

标签: file-upload vert.x

我的后端代码与此question非常相似。

Router router  = Router.router(vertx);
router.route().handler(BodyHandler.create().setDeleteUploadedFilesOnEnd(true));

router.route("/api/*")
                    .produces(Constants.JSON_CONTENT_TYPE)
                    .failureHandler(rc -> {
                        // handling failure code
                });

router.post("/api/upload").handler(uploadHandler::uploadHandler);
vertx.createHttpServer(httpOptions)
                    .requestHandler(router::accept)                             // The router::accept, method passes all routes defined in Router.
                    .listen(// do things);
class UploadHandler() {
    void uploadHandler(RoutingContext context) {
        uploads.forEach(// do things);
    }
}

我一直在使用 postman 来测试这些方法。它工作得很好。

postman 中,我选择 POST 无标题表单数据作为正文,然后选择< strong>文件而不是文本上传文件。

我在服务器中检查了 postman 自动包含内容类型

我认为这是一个很好的方法。如果有更好的方法,请告诉我。

我的问题是单元测试。 我使用了与此类似的代码。 https://github.com/vert-x/vertx-examples/blob/master/src/raw/java/upload/UploadClient.java

还有其他类似的内容。但服务器一直说没有附加文件。

将文件发送到服务器的好方法是什么?

1 个答案:

答案 0 :(得分:0)

您问题中的链接指向旧版本的Vert.x

使用最新版本,您应该使用Vert.x Web客户端。

String filename = "upload.txt";
FileSystem fs = vertx.fileSystem();

WebClient client = WebClient.create(vertx);

fs.props(filename, ares -> {
  FileProps props = ares.result();
  System.out.println("props is " + props);
  long size = props.size();

  HttpRequest<Buffer> req = client.put(8080, "localhost", "/");
  req.putHeader("content-length", "" + size);

  fs.open(filename, new OpenOptions(), ares2 -> {
    req.sendStream(ares2.result(), ar -> {
      if (ar.succeeded()) {
        HttpResponse<Buffer> response = ar.result();
        System.out.println("Got HTTP response with status " + response.statusCode());
      } else {
        ar.cause().printStackTrace();
      }
    });
  });
});

有关完整的客户端/服务器示例,请查看Vert.x examples repository