当前位置: 首页 > 知识库问答 >
问题:

将文件发送到vertx eventbus

贡和裕
2023-03-14

我正在尝试使用Vertx上传一个文件,该请求是一个包含PDF的POST请求,我的处理程序如下所示(我从github中的一个示例中获取了代码):

...
Set<FileUpload> fileUploadSet = routingContext.fileUploads();
Iterator<FileUpload> fileUploadIterator = fileUploadSet.iterator();
while (fileUploadIterator.hasNext()) {
    FileUpload fileUpload = fileUploadIterator.next();

    // Use the Event Bus to dispatch the file now
    // Since Event Bus does not support POJOs by default so we need to create a MessageCodec implementation
    // and provide methods for encode and decode the bytes
    ...

    vertx.eventBus().<"what to use here?">send(Address.UPLOAD_FILE, "", result -> {
        if (result.succeeded()) {
            req.response()
               .setStatusCode(200)
               .write(result.result().body())
               .end();
        } else {
            logger.info(result.cause().toString());
            req.response()
               .setStatusCode(500)
               .write(result.cause().toString())
               .end();
        }
    });

根据上面的评论,我不能只尝试这样的事情(它实际上显示了一个错误):

vertx.eventBus().<FileUpload>send(Address.UPLOAD_FILE, "", result -> {

我一直在检查MessageCodec,但我不清楚如何将其应用于这种情况。

注意:此escenario必须使用eventbus。

共有2个答案

裴欣然
2023-03-14

您可以使用缓冲区来实现这一点
在路由中,您迭代文件,读取临时文件并将其作为缓冲区发送:

for (FileUpload fileUpload : routingContext.fileUploads()) {
    vertx.fileSystem().readFile(fileUpload.uploadedFileName(), (f) -> {
        if (f.succeeded()) {
            vertx.eventBus().send(Address.UPLOAD_FILE, f.result());
            // Also handle response here
        }
    });
}

然后接收垂直线可能如下所示:

private static class ReceiverVerticle extends AbstractVerticle {

    @Override
    public void start() {
        vertx.eventBus().consumer(Address.UPLOAD_FILE, new Handler<Message<Buffer>>() {

            @Override
            public void handle(Message<Buffer> event) {
                System.out.println(event.body().toString());

                event.reply("OK");
            }
        });
    }
}
单于奕
2023-03-14

当您使用超文本传输协议post将文件上传到vertx时,该文件将存储在文件系统中。

您必须在bodyhandler中设置上载目录:http://vertx.io/docs/apidocs/io/vertx/ext/web/handler/BodyHandler.html#setUploadsDirectory-java。串-

FileUpload对象只保存FileUpload的元信息,而不保存内容本身。

如果要通过eventbus发送文件,必须首先从文件系统中读取:http://vertx.io/docs/apidocs/io/vertx/core/file/FileSystem.html#readFile-java。lang.String-io。vertx。果心处理程序-

 类似资料:
  • 我将pdf文档存储在服务器端的文件系统中。 我需要让用户下载其中一个,当他/她点击下载。 问题是我知道如何将文件从NodeJS发送到浏览器,但这里的请求将由ReactJS axios请求发出。因此,当我发送文件时,响应将转到react。如何将该pdf文件发送给用户?我是否使用前端代码直接访问文件系统? 在NodeJS中执行之后,当我记录响应时,我在浏览器控制台中获得以下信息 我如何处理这个问题,以

  • 问题内容: 您好,我一直在尝试将文件从node.js发送到客户端。 我的代码有效,但是当客户端转到指定的url()时,它将流式传输文件。 从Google Chrome浏览器访问该文件可使文件(.mp3)在播放器中播放。 我的目标是让客户的浏览器下载文件,然后问客户他想在哪里存储文件,而不是在网站上流式传输。 问题答案: 您需要设置一些标题标志。 用下载代替流媒体;

  • 问题内容: 我想知道如何将zip文件发送到WebApi控制器,反之亦然。问题是我的WebApi使用json传输数据。一个zip文件不可序列化,或者是流。字符串将可序列化。但是除了将zip转换为字符串并发送字符串之外,还必须有其他解决方案。这听起来是错误的。 任何想法如何做到这一点? 问题答案: 如果您的API方法期望使用,则可以从中提取流: 当使用张贴HTTP表单时,这对我有用。

  • 问题内容: 我使用此功能将html文件发送到客户端,但是在客户端中我什么也没有得到(空白页),没有错误。我有什么问题吗?,请帮忙? 我的test.html文件 问题答案: 尝试这样的代码: 使用res.sendFile而不是手动读取文件,以便express可以为您正确设置内容类型。 您不需要这行,因为这是由express内部处理的。

  • 我需要将大型csv文件从node发送到Python。这段代码适用于小文件,但不适用于大文件。我也试过产卵过程。我不明白问题出在哪里。如果有人知道正确的代码,请分享 代码: 错误

  • 问题内容: 我不知道在Flash或Actionscript中进行编程。实际上,我是一名Java EE开发人员。 在Flash文件中,我有以下方法: 此方法会将录制的声音保存到我们将指定的文件夹中的“ recording.wav”中。 我想要做的是通过将录制的声音发送到Java Servlet来更改保存到磁盘的内容。 我找到了这段代码,但是我不知道如何在HTTP请求中发送的params中插入reco