package io.vertx.example.web.upload; import io.vertx.core.AbstractVerticle;
import io.vertx.example.util.Runner;
import io.vertx.ext.web.FileUpload;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.BodyHandler; /*
* @author <a href="http://tfox.org">Tim Fox</a>
*/
public class Server extends AbstractVerticle { // Convenience method so you can run it in your IDE
public static void main(String[] args) {
Runner.runExample(Server.class);
} @Override
public void start() throws Exception { Router router = Router.router(vertx); // Enable multipart form data parsing
router.route().handler(BodyHandler.create().setUploadsDirectory(System.getProperty("java.io.tmpdir"))); router.route("/").handler(routingContext -> {
routingContext.response().putHeader("content-type", "text/html").end(
"<form action="/form" method="post" enctype="multipart/form-data">n" +
" <div>n" +
" <label for="name">Select a file:</label>n" +
" <input type="file" name="file" />n" +
" </div>n" +
" <div class="button">n" +
" <button type="submit">Send</button>n" +
" </div>" +
"</form>"
);
}); // handle the form
router.post("/form").handler(ctx -> {
ctx.response().putHeader("Content-Type", "text/plain"); ctx.response().setChunked(true); for (FileUpload f : ctx.fileUploads()) {
System.out.println("f");
ctx.response().write("Filename: " + f.fileName());
ctx.response().write("n");
ctx.response().write("Size: " + f.size());
} ctx.response().end();
}); vertx.createHttpServer().requestHandler(router::accept).listen(8080);
}
}
您可以使用vertx-web轻松处理文件上传:
router.route().handler(BodyHandler.create()); router.post("/some/path/uploads").handler(routingContext -> { Set<FileUpload> uploads = routingContext.fileUploads();
// Do something with uploads....
});