List of usage examples for io.vertx.core.http HttpServerRequest uploadHandler
@Fluent HttpServerRequest uploadHandler(@Nullable Handler<HttpServerFileUpload> uploadHandler);
From source file:examples.HTTPExamples.java
License:Open Source License
public void example14(HttpServerRequest request) { request.uploadHandler(upload -> { upload.handler(chunk -> {/* w ww . jav a 2 s .co m*/ System.out.println("Received a chunk of the upload of length " + chunk.length()); }); }); }
From source file:examples.HTTPExamples.java
License:Open Source License
public void example15(HttpServerRequest request) { request.uploadHandler(upload -> { upload.streamToFileSystem("myuploads_directory/" + upload.filename()); });/*from w w w. ja v a2s. c o m*/ }
From source file:fr.wseduc.rack.controllers.RackController.java
License:Open Source License
/** * Post a new document to other people's rack folder. * @param request Client request containing a list of user ids belonging to the receivers and the file. *///from w w w . j a v a2 s . co m @Post("") @SecuredAction(send) public void postRack(final HttpServerRequest request) { UserUtils.getUserInfos(eb, request, new Handler<UserInfos>() { @Override public void handle(final UserInfos userInfos) { if (userInfos == null) { badRequest(request); return; } request.setExpectMultipart(true); final Buffer fileBuffer = Buffer.buffer(); final JsonObject metadata = new JsonObject(); /* Upload file */ request.uploadHandler(getUploadHandler(fileBuffer, metadata, request)); /* After upload */ request.endHandler(new Handler<Void>() { @Override public void handle(Void v) { String users = request.formAttributes().get("users"); if (users == null) { badRequest(request); return; } String[] userIds = users.split(","); final AtomicInteger countdown = new AtomicInteger(userIds.length); final AtomicInteger success = new AtomicInteger(0); final AtomicInteger failure = new AtomicInteger(0); /* Final handler - called after each attempt */ final Handler<Boolean> finalHandler = new Handler<Boolean>() { @Override public void handle(Boolean event) { if (event == null || !event) failure.addAndGet(1); else success.addAndGet(1); if (countdown.decrementAndGet() == 0) { JsonObject result = new JsonObject(); result.put("success", success.get()); result.put("failure", failure.get()); renderJson(request, result); } } }; for (final String to : userIds) { /* Query user and check existence */ String query = "MATCH (n:User) " + "WHERE n.id = {id} " + "RETURN count(n) as nb, n.displayName as username"; Map<String, Object> params = new HashMap<>(); params.put("id", to); Handler<Message<JsonObject>> existenceHandler = new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> res) { JsonArray result = res.body().getJsonArray("result"); if (!"ok".equals(res.body().getString("status")) || 1 != result.size() || 1 != result.getJsonObject(0).getInteger("nb")) { finalHandler.handle(false); return; } /* Pre write rack document fields */ final JsonObject doc = new JsonObject(); doc.put("to", to); doc.put("toName", result.getJsonObject(0).getString("username")); doc.put("from", userInfos.getUserId()); doc.put("fromName", userInfos.getUsername()); String now = dateFormat.format(new Date()); doc.put("sent", now); /* Rack collection saving */ final Handler<JsonObject> rackSaveHandler = new Handler<JsonObject>() { @Override public void handle(JsonObject uploaded) { if (uploaded == null || !"ok".equals(uploaded.getString("status"))) { finalHandler.handle(false); } else { addAfterUpload(uploaded.put("metadata", metadata), doc, request.params().get("name"), request.params().get("application"), request.params().getAll("thumbnail"), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> res) { if ("ok".equals(res.body().getString("status"))) { JsonObject params = new JsonObject() .put("uri", "/userbook/annuaire#" + doc.getString("from")) .put("resourceUri", pathPrefix) .put("username", doc.getString("fromName")) .put("documentName", doc.getString("name")); List<String> receivers = new ArrayList<>(); receivers.add(doc.getString("to")); JsonObject pushNotif = new JsonObject() .put("title", "rack.push.notif.rack-post") .put("body", I18n.getInstance().translate( "rack.push.notif.rack-post.body", getHost(request), I18n.acceptLanguage( request), doc.getString( "fromName"), doc.getString("name"))); params.put("pushNotif", pushNotif); timelineHelper.notifyTimeline(request, "rack.rack-post", userInfos, receivers, userInfos.getUserId() + System.currentTimeMillis() + "postrack", null, params, true); finalHandler.handle(true); } else { finalHandler.handle(false); } } }); } } }; /* Get user quota & check */ getUserQuota(to, new Handler<JsonObject>() { @Override public void handle(JsonObject j) { if (j == null || "error".equals(j.getString("status"))) { finalHandler.handle(false); return; } long emptySize = 0l; long quota = j.getLong("quota", 0l); long storage = j.getLong("storage", 0l); emptySize = quota - storage; if (emptySize < metadata.getLong("size", 0l)) { finalHandler.handle(false); return; } //Save file RackController.this.storage.writeBuffer(fileBuffer, metadata.getString("content-type"), metadata.getString("name"), rackSaveHandler); } }); } }; Neo4j.getInstance().execute(query, params, existenceHandler); } } }); } }); }
From source file:org.entcore.common.storage.impl.FileStorage.java
License:Open Source License
@Override public void writeUploadFile(final HttpServerRequest request, final Long maxSize, final Handler<JsonObject> handler) { request.pause();/*from w w w .j a v a 2s .c o m*/ final String id = UUID.randomUUID().toString(); final String path; final JsonObject res = new JsonObject(); try { path = getPath(id); } catch (FileNotFoundException e) { handler.handle(res.put("status", "error").put("message", "invalid.path")); log.warn(e.getMessage(), e); return; } request.setExpectMultipart(true); request.uploadHandler(new Handler<HttpServerFileUpload>() { @Override public void handle(final HttpServerFileUpload upload) { request.pause(); final JsonObject metadata = FileUtils.metadata(upload); if (validator != null) { validator.process(metadata, new JsonObject().put("maxSize", maxSize), new Handler<AsyncResult<Void>>() { @Override public void handle(AsyncResult<Void> event) { if (event.succeeded()) { doUpload(upload, metadata); } else { handler.handle(res.put("status", "error").put("message", event.cause().getMessage())); } } }); } else { doUpload(upload, metadata); } } private void doUpload(final HttpServerFileUpload upload, final JsonObject metadata) { upload.endHandler(new Handler<Void>() { @Override public void handle(Void event) { if (metadata.getLong("size") == 0l) { metadata.put("size", upload.size()); if (maxSize != null && maxSize < metadata.getLong("size", 0l)) { handler.handle(res.put("status", "error").put("message", "file.too.large")); try { fs.delete(getPath(id), new Handler<AsyncResult<Void>>() { @Override public void handle(AsyncResult<Void> event) { if (event.failed()) { log.error(event.cause().getMessage(), event.cause()); } } }); } catch (FileNotFoundException e) { log.error(e.getMessage(), e); } } } handler.handle(res.put("_id", id).put("status", "ok").put("metadata", metadata)); scanFile(path); } }); upload.exceptionHandler(new Handler<Throwable>() { @Override public void handle(Throwable event) { handler.handle(res.put("status", "error")); log.error(event.getMessage(), event); } }); upload.streamToFileSystem(path); } }); mkdirsIfNotExists(id, path, new Handler<AsyncResult<Void>>() { @Override public void handle(AsyncResult<Void> event) { if (event.succeeded()) { request.resume(); } else { handler.handle(res.put("status", "error")); log.error(event.cause().getMessage(), event.cause()); } } }); }
From source file:org.entcore.common.storage.impl.GridfsStorage.java
License:Open Source License
@Override public void writeUploadFile(HttpServerRequest request, Long maxSize, Handler<JsonObject> handler) { request.setExpectMultipart(true);// w w w. ja va 2 s . c om request.uploadHandler(new Handler<HttpServerFileUpload>() { @Override public void handle(final HttpServerFileUpload event) { final Buffer buff = Buffer.buffer(); event.handler(new Handler<Buffer>() { @Override public void handle(Buffer event) { buff.appendBuffer(event); } }); event.endHandler(new Handler<Void>() { @Override public void handle(Void end) { writeBuffer(null, buff, maxSize, event.contentType(), event.filename(), metadata(event), handler); } }); } }); }
From source file:org.entcore.directory.controllers.ImportController.java
License:Open Source License
private void uploadImport(final HttpServerRequest request, final Handler<AsyncResult<ImportInfos>> handler) { request.pause();// w w w . j a v a2 s . c o m final String importId = UUID.randomUUID().toString(); final String path = config.getString("wizard-path", "/tmp") + File.separator + importId; request.setExpectMultipart(true); request.endHandler(new Handler<Void>() { @Override public void handle(Void v) { final ImportInfos importInfos = new ImportInfos(); importInfos.setId(importId); importInfos.setPath(path); importInfos.setStructureId(request.formAttributes().get("structureId")); importInfos.setStructureExternalId(request.formAttributes().get("structureExternalId")); importInfos.setPreDelete(paramToBoolean(request.formAttributes().get("predelete"))); importInfos.setTransition(paramToBoolean(request.formAttributes().get("transition"))); importInfos.setStructureName(request.formAttributes().get("structureName")); importInfos.setUAI(request.formAttributes().get("UAI")); importInfos.setLanguage(I18n.acceptLanguage(request)); if (isNotEmpty(request.formAttributes().get("classExternalId"))) { importInfos.setOverrideClass(request.formAttributes().get("classExternalId")); } try { importInfos.setFeeder(request.formAttributes().get("type")); } catch (IllegalArgumentException | NullPointerException e) { handler.handle( new DefaultAsyncResult<ImportInfos>(new ImportException("invalid.import.type", e))); deleteImportPath(vertx, path); return; } UserUtils.getUserInfos(eb, request, new Handler<UserInfos>() { @Override public void handle(UserInfos user) { if (user == null) { handler.handle( new DefaultAsyncResult<ImportInfos>(new ImportException("invalid.admin"))); deleteImportPath(vertx, path); return; } importInfos.validate( user.getFunctions() != null && user.getFunctions().containsKey(DefaultFunctions.SUPER_ADMIN), vertx, new Handler<AsyncResult<String>>() { @Override public void handle(AsyncResult<String> validate) { if (validate.succeeded()) { if (validate.result() == null) { handler.handle(new DefaultAsyncResult<>(importInfos)); } else { handler.handle(new DefaultAsyncResult<ImportInfos>( new ImportException(validate.result()))); deleteImportPath(vertx, path); } } else { handler.handle(new DefaultAsyncResult<ImportInfos>(validate.cause())); log.error("Validate error", validate.cause()); deleteImportPath(vertx, path); } } }); } }); } }); request.exceptionHandler(new Handler<Throwable>() { @Override public void handle(Throwable event) { handler.handle(new DefaultAsyncResult<ImportInfos>(event)); deleteImportPath(vertx, path); } }); request.uploadHandler(new Handler<HttpServerFileUpload>() { @Override public void handle(final HttpServerFileUpload upload) { if (!upload.filename().toLowerCase().endsWith(".csv")) { handler.handle( new DefaultAsyncResult<ImportInfos>(new ImportException("invalid.file.extension"))); return; } final String filename = path + File.separator + upload.name(); upload.endHandler(new Handler<Void>() { @Override public void handle(Void event) { log.info("File " + upload.filename() + " uploaded as " + upload.name()); } }); upload.streamToFileSystem(filename); } }); vertx.fileSystem().mkdir(path, new Handler<AsyncResult<Void>>() { @Override public void handle(AsyncResult<Void> event) { if (event.succeeded()) { request.resume(); } else { handler.handle( new DefaultAsyncResult<ImportInfos>(new ImportException("mkdir.error", event.cause()))); } } }); }
From source file:org.entcore.directory.controllers.TimetableController.java
License:Open Source License
@Post("/timetable/import/:structureId") @ResourceFilter(AdminFilter.class) @SecuredAction(value = "", type = ActionType.RESOURCE) public void importTimetable(final HttpServerRequest request) { request.pause();/*from w w w . j a va2s . c o m*/ final String importId = UUID.randomUUID().toString(); final String path = config.getString("timetable-path", "/tmp") + File.separator + importId; request.setExpectMultipart(true); request.exceptionHandler(new Handler<Throwable>() { @Override public void handle(Throwable event) { badRequest(request, event.getMessage()); deleteImportPath(vertx, path); } }); request.uploadHandler(new Handler<HttpServerFileUpload>() { @Override public void handle(final HttpServerFileUpload upload) { final String filename = path + File.separator + upload.filename(); upload.endHandler(new Handler<Void>() { @Override public void handle(Void event) { timetableService.importTimetable(request.params().get("structureId"), filename, getHost(request), I18n.acceptLanguage(request), reportResponseHandler(vertx, path, request)); } }); upload.streamToFileSystem(filename); } }); vertx.fileSystem().mkdir(path, new Handler<AsyncResult<Void>>() { @Override public void handle(AsyncResult<Void> event) { if (event.succeeded()) { request.resume(); } else { badRequest(request, "mkdir.error"); } } }); }
From source file:org.wisdom.framework.vertx.HttpHandler.java
License:Apache License
/** * Handles a new HTTP request./*www .j a v a 2s. c o m*/ * The actual reading of the request is delegated to the {@link org.wisdom.framework.vertx.ContextFromVertx} and * {@link org.wisdom.framework.vertx.RequestFromVertx} classes. However, the close handler is set here and * trigger the request dispatch (i.e. Wisdom processing). * * @param request the request */ @Override public void handle(final HttpServerRequest request) { LOGGER.debug("A request has arrived on the server : {} {}", request.method(), request.path()); final ContextFromVertx context = new ContextFromVertx(vertx, vertx.getOrCreateContext(), accessor, request); if (!server.accept(request.path())) { LOGGER.warn("Request on {} denied by {}", request.path(), server.name()); writeResponse(context, (RequestFromVertx) context.request(), server.getOnDeniedResult(), false, true); } else { Buffer raw = Buffer.buffer(0); RequestFromVertx req = (RequestFromVertx) context.request(); AtomicBoolean error = new AtomicBoolean(); if (HttpUtils.isPostOrPut(request)) { request.setExpectMultipart(true); request.uploadHandler(upload -> req.getFiles() .add(new MixedFileUpload(context.vertx(), upload, accessor.getConfiguration().getLongWithDefault("http.upload.disk.threshold", DiskFileUpload.MINSIZE), accessor.getConfiguration().getLongWithDefault("http.upload.max", -1L), r -> { request.uploadHandler(null); request.handler(null); error.set(true); writeResponse(context, req, r, false, true); }))); } int maxBodySize = accessor.getConfiguration().getIntegerWithDefault("request.body.max.size", 100 * 1024); request.handler(event -> { if (event == null) { return; } // To avoid we run out of memory we cut the read body to 100Kb. This can be configured using the // "request.body.max.size" property. boolean exceeded = raw.length() >= maxBodySize; // We may have the content in different HTTP message, check if we already have a content. // Issue #257. if (!exceeded) { raw.appendBuffer(event); } else { // Remove the handler as we stop reading the request. request.handler(null); error.set(true); writeResponse( context, req, new Result(Status.PAYLOAD_TOO_LARGE) .render("Body size exceeded - request cancelled").as(MimeTypes.TEXT), false, true); } }); request.endHandler(event -> { if (error.get()) { // Error already written. return; } req.setRawBody(raw); // Notifies the context that the request has been read, we start the dispatching. if (context.ready()) { // Dispatch. dispatch(context, (RequestFromVertx) context.request()); } else { writeResponse(context, req, Results.badRequest("Request processing failed"), false, true); } }); } }