2017-12-07 2 views
0

Mein Backend-Code ist diesem question sehr ähnlich.Vertex FileUpload Unit Test

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

Ich habe mit Postbote die Methoden zu testen. Es funktioniert perfekt.

In Postbote, wähle ich POST, keine Header, form-data als Körper, und wählen Dateien anstelle von Text-Dateien zu laden.

Ich checkte im Server ein, dass Postbote die content-type automatisch einschließen.

Ich gehe davon aus, dass dies ein guter Ansatz ist. Bitte lassen Sie mich wissen, ob es einen besseren Ansatz gibt.

Mein Problem ist bei Unit-Tests. Ich habe den Code ähnlich verwendet. https://github.com/vert-x/vertx-examples/blob/master/src/raw/java/upload/UploadClient.java

Es gibt andere Schnipsel, die ähnliche Dinge tun. Aber der Server sagt immer, dass keine Dateien angehängt sind.

Was ist eine gute Möglichkeit, eine Datei an den Server zu senden?

Antwort

0

Der Link in Ihrer Frage verweist auf eine alte Version von Vert.x

Mit einer aktuellen Version, sollten Sie das Vert.x Web Client verwenden.

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

Für eine vollständige Client/Server-Probe Besuche des Vert.x examples repository

+0

Hallo, Danke für die Antwort. Ich habe diesen Code ausprobiert. Der Server sagt immer noch, dass er keine Datei empfängt. Ich fange an, meinen Servercode zu bezweifeln. Aber Postman konnte Dateien senden. – william