我写了一个verticle来使用routingContext.fileUploads()从vertx文件系统中读取多部分表单数据。现在我想写一个测试用例。我正在尝试将文件上传到 vertx 文件系统,所以我可以调用我的 verticle 从文件系统中读取文件并测试我的代码。
问问题
358 次
2 回答
0
如果您使用的是 vertx web,则必须将 a 附加BodyHandler
到路由器(不要忘记添加failureHandler
):
router
.post(UPLOAD_PATH)
.handler(BodyHandler.create(true)
.setHandleFileUploads(true)
.setUploadsDirectory(uploadPath))
.handler(this::handleUpload)
.failureHandler(rc -> {
LOGGER.error(String.format("Failure appears on upload request: %s", failure.get()));
});
然后您可以通过 le 上下文访问:
private void handleUpload(RoutingContext context) {
...
FileUpload file = context.fileUploads().iterator().next();
...
}
将文件复制到您想要的路径后,您可以WebClient
在测试中创建一个并访问 vert.x 文件系统以查看文件是否存在:
@Test
public void uploadTest(TestContext context) {
Async async = context.async();
WebClient client = WebClient.create(vertx);
MultipartForm form = MultipartForm.create().binaryFileUpload(...);
client
.post(8080, "localhost", YOUR_PATH)
.sendMultipartForm(form, ar -> {
if (ar.succeeded()) {
// Ok
FileSystem fs = vertx.fileSystem();
fs.readDir(tempFile.getAbsolutePath(), listOfFileR -> {
if (listOfFileR.failed()) {
context.verify(v -> fail("read dir failed", listOfFileR.cause()));
}
context.verify(v -> yourAssert());
async.countDown();
});
} else {
context.verify(v -> fail("Send file failed", ar.cause()));
}
});
}
于 2021-08-09T13:06:56.967 回答
0
我了解如何将文件写入文件系统。这是我的代码。
字符串文件名 = "C:\test_file.txt";
String temp = vertx.fileSystem().createTempFileBlocking("", ""); // This creates a temp file in system temp directory
Path path = Paths.get(fileName);
byte[] data = Files.readAllBytes(path);
Buffer buffer = Buffer.buffer(data);
FileSystem fs = vertx.fileSystem();
fs.writeFileBlocking(temp, buffer);
Buffer read = vertx.fileSystem().readFileBlocking(temp);
vertx.fileSystem().readFile(temp, f -> {
if (f.succeeded()) {
System.out.println("File read");
}});
于 2020-05-27T01:51:44.043 回答