import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.FileUpload;
import io.vertx.ext.web.RoutingContext;
public class DbmetaAction {
private static final Logger LOG = LoggerFactory.getLogger(DbmetaAction.class);
public void upload(RoutingContext routingContext) {
String dbName = routingContext.request().getParam("dbName");
LOG.info("meta for database: {}", dbName);
JsonObject json = new JsonObject(); // response
Set<FileUpload> uploads = routingContext.fileUploads();
for (FileUpload fupload : uploads) {
LOG.info("name: {}, fileName: {}, uploadedFileName: {}", fupload.name(), fupload.fileName(),
fupload.uploadedFileName());
LOG.info("size: {}, contentType: {}, charSet: {}, contentTransferEncoding: {} ", fupload.size(),
fupload.contentType(), fupload.charSet(), fupload.contentTransferEncoding());
json.put(fupload.name(), fupload.uploadedFileName());
}
routingContext.response().putHeader("Content-Type", "application/json;charset=UTF-8");
routingContext.response().end(json.toString());
}
}
Router dbmetaRouter = Router.router(vertx);
mainRouter.mountSubRouter("/dbmeta", dbmetaRouter);
// main.dbmeta
DbmetaAction dbmetaAction = new DbmetaAction();
dbmetaRouter.route().handler(BodyHandler.create());
dbmetaRouter.route(HttpMethod.POST, "/:dbname").handler(dbmetaAction::upload);
$ curl -F "[email protected]" http://127.0.0.1:8080/dbmeta/employee -i
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 61
{"fname":"file-uploads/95b232e5-6fbb-4694-aec4-4d2f06bfcd69"}%
解包文件
请求处理分两个阶段:
routingContext.fileUploads();
设置了文件的meta信息(包括:文件容量大小,文件名称,文件磁盘地址,文件ContentType和CharSet)。