Example usage for io.vertx.core.http HttpServerRequest uploadHandler

List of usage examples for io.vertx.core.http HttpServerRequest uploadHandler

Introduction

In this page you can find the example usage for io.vertx.core.http HttpServerRequest uploadHandler.

Prototype

@Fluent
HttpServerRequest uploadHandler(@Nullable Handler<HttpServerFileUpload> uploadHandler);

Source Link

Document

Set an upload handler.

Usage

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