List of usage examples for io.vertx.core.http HttpServerFileUpload exceptionHandler
@Override HttpServerFileUpload exceptionHandler(Handler<Throwable> handler);
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();// ww w.j a va 2s. co 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.wisdom.framework.vertx.file.MixedFileUpload.java
License:Apache License
/** * Creates an instance of {@link org.wisdom.framework.vertx.file.VertxFileUpload}. * * @param vertx the Vert.X instance//www . j a va2s . c o m * @param upload the upload object * @param limitSize the threshold. If the amount of uploaded data is below this limit, * {@link org.wisdom.framework.vertx.file.MemoryFileUpload} is used to backend the uploaded file. * Otherwise, it uses a {@link org.wisdom.framework.vertx.file.DiskFileUpload}. */ public MixedFileUpload(final Vertx vertx, final HttpServerFileUpload upload, final long limitSize, final long maxSize, final Handler<Result> errorHandler) { super(upload, errorHandler); delegate = new MemoryFileUpload(upload, errorHandler); upload.exceptionHandler(event -> LoggerFactory.getLogger(MixedFileUpload.class) .error("Cannot read the uploaded item {} ({})", upload.name(), upload.filename(), event)) .endHandler(event -> delegate.close()).handler(event -> { if (event != null) { // We are still in memory. if (delegate instanceof MemoryFileUpload) { MemoryFileUpload mem = (MemoryFileUpload) delegate; checkSize(mem.buffer.length() + event.length(), maxSize, upload); if (mem.buffer.length() + event.length() > limitSize) { // Switch to disk file upload. DiskFileUpload disk = new DiskFileUpload(vertx, upload, errorHandler); // Initial push (mem + current buffer) disk.push(mem.buffer.appendBuffer(event)); // No cleanup required for the memory based backend. delegate = disk; // the disk based implementation use a pump. } else { delegate.push(event); } } } }); }