Example usage for io.vertx.core.http HttpServerResponse sendFile

List of usage examples for io.vertx.core.http HttpServerResponse sendFile

Introduction

In this page you can find the example usage for io.vertx.core.http HttpServerResponse sendFile.

Prototype

@Fluent
default HttpServerResponse sendFile(String filename, Handler<AsyncResult<Void>> resultHandler) 

Source Link

Document

Like #sendFile(String) but providing a handler which will be notified once the file has been completely written to the wire.

Usage

From source file:de.braintags.netrelay.controller.filemanager.elfinder.command.impl.FileCommand.java

License:Open Source License

@Override
public void execute(ElFinderContext efContext, JsonObject json, Handler<AsyncResult<ITarget>> handler) {
    String target = efContext.getParameter("target");
    boolean download = STREAM.equals(efContext.getParameter("download"));
    ITarget fsi = super.findTarget(efContext, target);
    HttpServerResponse response = efContext.getRoutingContext().response();
    if (download) {
        response.sendFile(fsi.getAbsolutePath(), res -> {
            if (res.failed()) {
                handler.handle(Future.failedFuture(res.cause()));
            } else {
                handler.handle(createFuture(fsi));
            }//from w w  w .  java2s  . c  o m
        });
    } else {
        String mime = fsi.getMimeType();
        response.putHeader("content-type", mime + "; charset=utf-8");
        response.end(fsi.readFile());
        handler.handle(createFuture(fsi));
    }
}

From source file:org.entcore.common.storage.impl.FileStorage.java

License:Open Source License

@Override
public void sendFile(String id, String downloadName, HttpServerRequest request, boolean inline,
        JsonObject metadata, Handler<AsyncResult<Void>> resultHandler) {
    final HttpServerResponse resp = request.response();
    try {/* w  ww  .  j  av  a  2 s .co m*/
        final String path = getPath(id);
        if (!inline) {
            String name = FileUtils.getNameWithExtension(downloadName, metadata);
            resp.putHeader("Content-Disposition", "attachment; filename=\"" + name + "\"");
        }
        ETag.addHeader(resp, id);
        if (metadata != null && metadata.getString("content-type") != null) {
            resp.putHeader("Content-Type", metadata.getString("content-type"));
        }
        if (resultHandler != null) {
            resp.sendFile(path, resultHandler);
        } else {
            resp.sendFile(path, ar -> {
                if (ar.failed() && !request.response().ended()) {
                    Renders.notFound(request);
                }
            });
        }
    } catch (FileNotFoundException e) {
        resp.setStatusCode(404).setStatusMessage("Not Found").end();
        if (resultHandler != null) {
            resultHandler.handle(new DefaultAsyncResult<>((Void) null));
        }
        log.warn(e.getMessage(), e);
    }
}

From source file:org.entcore.conversation.controllers.ConversationController.java

License:Open Source License

private void zipAllAttachments(final HttpServerRequest request, JsonArray files) {
    JsonObject tmp;//from w ww .j ava 2 s.  c  o  m
    final FileSystem fs = vertx.fileSystem();
    final List<String> fileIds = new ArrayList<>();
    final JsonObject aliasFileName = new JsonObject();
    final String zipDownloadName = I18n.getInstance().translate("attachments", I18n.DEFAULT_DOMAIN,
            I18n.acceptLanguage(request)) + ".zip";
    final String zipDirectory = exportPath + File.separator + UUID.randomUUID().toString();

    for (Object file : files) {
        tmp = (JsonObject) file;
        fileIds.add(tmp.getString("id"));
        aliasFileName.put(tmp.getString("id"), StringUtils.stripAccents(tmp.getString("filename")));
    }

    fs.mkdirs(zipDirectory, new Handler<AsyncResult<Void>>() {

        private void delete(final String path) {
            fs.deleteRecursive(path, true, new Handler<AsyncResult<Void>>() {
                @Override
                public void handle(AsyncResult<Void> event) {
                    if (event.failed())
                        log.error("[Conversation] Error deleting  : " + path, event.cause());
                }
            });
        }

        @Override
        public void handle(AsyncResult<Void> event) {
            if (event.succeeded()) {
                final String zipfile = zipDirectory + ".zip";

                storage.writeToFileSystem(fileIds.toArray(new String[0]), zipDirectory, aliasFileName,
                        new Handler<JsonObject>() {
                            @Override
                            public void handle(JsonObject event) {
                                if (!"ok".equals(event.getString("status"))) {
                                    log.error("[Conversation] Can't write to zip directory : "
                                            + event.getString("message"));
                                    delete(zipDirectory);
                                    badRequest(request);

                                } else {
                                    Zip.getInstance().zipFolder(zipDirectory, zipfile, true,
                                            Deflater.NO_COMPRESSION, new Handler<Message<JsonObject>>() {
                                                @Override
                                                public void handle(Message<JsonObject> event) {
                                                    if (!"ok".equals(event.body().getString("status"))) {
                                                        log.error("[Conversation] Zip folder " + zipDirectory
                                                                + " error : "
                                                                + event.body().getString("message"));
                                                        delete(zipDirectory);
                                                        badRequest(request);
                                                    } else {
                                                        final HttpServerResponse resp = request.response();
                                                        resp.putHeader("Content-Disposition",
                                                                "attachment; filename=\"" + zipDownloadName
                                                                        + "\"");
                                                        resp.putHeader("Content-Type",
                                                                "application/zip; name=\"\" + zipDownloadName + \"\"");
                                                        resp.sendFile(zipfile,
                                                                new Handler<AsyncResult<Void>>() {
                                                                    public void handle(
                                                                            AsyncResult<Void> event) {
                                                                        if (event.failed())
                                                                            log.error(
                                                                                    "Error can't send  the file: ",
                                                                                    event.cause());
                                                                        delete(zipfile);
                                                                    }
                                                                });
                                                    }
                                                }
                                            });
                                }
                            }
                        });
            }
        }
    });
}