簡體   English   中英

將文件發送到vertx eventbus

[英]Sending a file to vertx eventbus

我正在嘗試使用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,但目前尚不清楚如何在這種情況下應用它。

注意:在這種情況下必須使用事件總線。

當您使用http post將文件上傳到vertx時,該文件將存儲在文件系統中。

您必須在bodyhandler中設置上載目錄: http ://vertx.io/docs/apidocs/io/vertx/ext/web/handler/BodyHandler.html#setUploadsDirectory-java.lang.String-

FileUpload對象僅將元信息保存到fileupload,但不保存內容本身。

如果要通過事件總線發送文件,則必須首先從文件系統中讀取文件: http : //vertx.io/docs/apidocs/io/vertx/core/file/FileSystem.html#readFile-java.lang .String-io.vertx.core.Handler-

您可以為此使用緩沖區。
在路由中,您遍歷文件,讀取臨時文件並將其作為緩沖區發送:

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");
            }
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM