2017-09-17 13 views
0

vertxを使ってファイルコードをアップロードしてPostgreSQLのテーブルに保存する必要があります。しかし、ファイルがマルチパートでアップロードされ、非同期にバイト配列を取得できません。私のコードを次に示しファイルをvertxでアップロードし、バイト配列に変換してデータベースに挿入します

public static void uploadLogo(RoutingContext routingContext) { 
    HttpServerRequest request = routingContext.request(); 
    HttpServerResponse response = routingContext.response(); 
    request.setExpectMultipart(true); 
    request.uploadHandler(upload -> { 
     upload.handler(chunk -> { 
      byte[] fileBytes = chunk.getBytes(); 
     }); 
     upload.endHandler(endHandler -> { 
      System.out.println("uploaded successfully"); 
     }); 
     upload.exceptionHandler(cause -> { 
      request.response().setChunked(true).end("Upload failed"); 
     }); 
    }); 
} 

は、ここで私は、一度にバイトfileBytes内の配列が、一部のみを取得します。非同期で動作するので、次のバイト配列を追加する方法を理解していません。ファイル全体のバイト配列を得る方法はありますか?

答えて

1

リクエストコンテキストには.fileUploads()メソッドがあります。
は完全な例についてはこちらをご覧ください:https://github.com/vert-x3/vertx-examples/blob/master/web-examples/src/main/java/io/vertx/example/web/upload/Server.java#L42

あなたがアップロードされたファイルにアクセスする場合:

Vertx vertx = Vertx.vertx(); 

    Router router = Router.router(vertx); 

    router.post("/upload").handler(ctx -> { 
     for (FileUpload fu : ctx.fileUploads()) { 
      vertx.fileSystem().readFile(fu.uploadedFileName(), fileHandler -> { 
       // Do something with buffer  
      }); 
     } 
    }); 
+0

しかし、FileUploadにはバイト配列を取得するメソッドがありません。それはファイルを書く方法しかありません – nilesh

+0

FileUploadはあなたが使うことができるアップロードされたファイルの名前を持っています。私はあなたのための例を追加しました。 –

0

あなたはバイト配列を取得することができた後fileUploads()メソッドを使用する必要がアップロードされたファイルを取得します。

JsonArray attachments = new JsonArray(); 
    for (FileUpload f : routingContext.fileUploads()) { 
     Buffer fileUploaded = routingContext.vertx().fileSystem().readFileBlocking(f.uploadedFileName()); 
     attachments.add(new JsonObject().put("body",fileUploaded.getBytes()).put("contentType",f.contentType()) 
       .put("fileName",f.fileName())); 
    } 
関連する問題