@Override public String getSubmittedFileName() { return fileUpload.fileName(); }
ctx.response().write("Filename: " + f.fileName()); ctx.response().write("\n"); ctx.response().write("Size: " + f.size());
/** * @return the file name of the upload as provided in the form submission */ public String fileName() { String ret = delegate.fileName(); return ret; }
/** * @return the file name of the upload as provided in the form submission */ public String fileName() { String ret = delegate.fileName(); return ret; }
@Override public String getSubmittedFileName() { return fileUpload.fileName(); }
private void testFileUpload(String uploadsDir, int size) throws Exception { String name = "somename"; String fileName = "somefile.dat"; String contentType = "application/octet-stream"; Buffer fileData = TestUtils.randomBuffer(size); router.route().handler(rc -> { Set<FileUpload> fileUploads = rc.fileUploads(); assertNotNull(fileUploads); assertEquals(1, fileUploads.size()); FileUpload upload = fileUploads.iterator().next(); assertEquals(name, upload.name()); assertEquals(fileName, upload.fileName()); assertEquals(contentType, upload.contentType()); assertEquals("binary", upload.contentTransferEncoding()); assertEquals(fileData.length(), upload.size()); String uploadedFileName = upload.uploadedFileName(); assertTrue(uploadedFileName.startsWith(uploadsDir + File.separator)); Buffer uploaded = vertx.fileSystem().readFileBlocking(uploadedFileName); assertEquals(fileData, uploaded); // the data is upload as HTML form, so the body should be empty Buffer rawBody = rc.getBody(); assertEquals(0, rawBody.length()); rc.response().end(); }); sendFileUploadRequest(fileData, 200, "OK"); }
Router router = Router.router(vertx); // Enable multipart form data parsing router.post("/upload").handler(BodyHandler.create() .setUploadsDirectory(FILE_LOCATION)); // handle the form router.post("/upload").handler(ctx -> { // in your example you only handle 1 file upload, here you can handle // any number of uploads for (FileUpload f : ctx.fileUploads()) { // do whatever you need to do with the file (it is already saved // on the directory you wanted... System.out.println("Filename: " + f.fileName()); System.out.println("Size: " + f.size()); } ctx.response().end(); });
private String[] examineNewDestination(FileSystem fs, FileUpload upload) { if (upload.fileName() == null || upload.fileName().hashCode() == 0) { throw new FileNameException("The upload contains no filename"); } String[] destinations = new String[2]; String upDir = getPersistenceController().readProperty(PersistenceController.UPLOAD_DIRECTORY_PROP, null, true); if (!fs.existsBlocking(upDir)) { fs.mkdirsBlocking(upDir); } String relDir = getPersistenceController().readProperty(PersistenceController.UPLOAD_RELATIVE_PATH_PROP, null, true); String fileName = createUniqueName(fs, upDir, upload.fileName()); destinations[0] = upDir + (upDir.endsWith("/") ? "" : "/") + fileName; destinations[1] = relDir + (relDir.endsWith("/") ? "" : "/") + fileName; return destinations; }
public UploadedFileImpl(Vertx vertx, HttpServerRequest req, FileUpload fu) { this.fu = fu; this.req = req; this.vertx = vertx; this.originalName = fu.fileName(); this.fileName = fu.uploadedFileName(); this.contentType = fu.contentType(); this.size = fu.size(); }
private boolean isHandleUpload(FileUpload upload, String startKey) { LOGGER.info( "CHECKING: " + upload.uploadedFileName() + " | fileName: " + upload.fileName() + " | name: " + upload.name()); String fieldName = upload.name().toLowerCase(); if (upload.size() <= 0) { LOGGER.info("NOT HANDLED: upload size is zero: " + upload.uploadedFileName() + " | fileName" + upload.fileName() + " | " + upload.name()); return false; } if (!fieldName.startsWith(startKey)) { LOGGER.info("NOT HANDLED: fieldname does not start with:" + startKey + " | " + fieldName); return false; } return true; }
private void handleFileUploads(String entityName, RoutingContext context, Map<String, String> params) { String startKey = entityName.toLowerCase() + "."; Set<FileUpload> fileUploads = context.fileUploads(); FileSystem fs = getPersistenceController().getVertx().fileSystem(); LOGGER.info("Number of fileuploads: " + fileUploads.size()); for (FileUpload upload : fileUploads) { if (isHandleUpload(upload, startKey)) { try { String fieldName = upload.name().toLowerCase(); LOGGER.info("uploaded file detected for field name " + fieldName + ", fileName: " + upload.fileName()); String relativePath = handleOneFile(fs, upload); String pureKey = fieldName.substring(startKey.length()); params.put(pureKey, relativePath); } catch (Exception e) { context.fail(e); } } } }
/** * Adds the upload route to the given router * * @param router the upload route is added to the given router */ private void setRouterAPI(Router router) { // API route for handling file uploads. router.route("/api/upload").handler(context -> { Iterator<FileUpload> iterator = context.fileUploads().iterator(); if (iterator.hasNext()) { MultiMap params = context.request().params(); logger.info("Receiving uploaded file with request id " + params.get(UPLOAD_ID)); FileUpload upload = context.fileUploads().iterator().next(); parse(upload.uploadedFileName(), params, upload.fileName(), onComplete(context, upload.fileName())); } else { context.put(MESSAGE, NO_FILE_WAS_UPLOADED); context.reroute(ERROR); } }); }
LOGGER.info("FileName: {}", upload.fileName()); if (!"file".equals(upload.name())) { removeFiles(new File(upload.uploadedFileName())); LOGGER.info("UploadedFileName: {}", upload.fileName()); sendFile(routingContext, upload.fileName(), saneFile); removeFiles(new File(upload.uploadedFileName()), saneFile); });
private void processMultipart(final HttpPost request, final FileUpload fileUpload, final File file) { final ContentType contentType = ContentType.create(fileUpload.contentType()); LOGGER.info("[ ZERO ] Read file from file system: {0}", file.getAbsolutePath()); final FileBody fileBody = new FileBody(file, contentType); final MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); /* * Custom content disposition * Because Api Gateway will send the request to micro service * It means that the content-disposition must be calculated by api gateway internally * here. * Now it's working to redirect request to micro service. * Related submitted issue: * https://github.com/vert-x3/vertx-web/issues/1137 */ final String disposition = "form-data; name=\"file\"; " + "filename=\"" + fileUpload.fileName() + ""; final FormBodyPart bodyPart = FormBodyPartBuilder.create() .setName("file") .addField("Content-Type", fileUpload.contentType()) .addField("Content-Transfer-Encoding", fileUpload.contentTransferEncoding()) .addField("Content-Disposition", disposition) .setBody(fileBody) .build(); builder.addPart(bodyPart); final HttpEntity entity = builder.build(); request.setEntity(entity); }
@Override public void handle(RoutingContext context) { LOGGER.info("LOGGING REQUEST FOR " + context.request().path()); MultiMap headers = context.request().headers(); LOGGER.info("HEADERS: " + headers.size()); headers.entries().forEach(entry -> LOGGER.info(" " + entry.getKey() + ": " + entry.getValue())); MultiMap params = context.request().params(); LOGGER.info("PARAMETER: " + params.size()); params.entries().forEach(entry -> LOGGER.info(" " + entry.getKey() + ": " + entry.getValue())); MultiMap formAttributes = context.request().formAttributes(); LOGGER.info("FORM_ATTRIBUTES: " + formAttributes.size()); formAttributes.entries().forEach(entry -> LOGGER.info(" " + entry.getKey() + ": " + entry.getValue())); Set<FileUpload> fileUploads = context.fileUploads(); LOGGER.info("FILE UPLOADS: " + fileUploads.size()); fileUploads.forEach(fu -> LOGGER.info(" NAME: " + fu.name() + " | FILENAME: " + fu.fileName() + " | UPLOADED: " + fu.uploadedFileName() + " | SIZE: " + fu.size())); LOGGER.info("USER: " + context.user()); context.next(); }
private void processMultipart(final HttpPost request, final FileUpload fileUpload, final File file) { final ContentType contentType = ContentType.create(fileUpload.contentType()); LOGGER.info("[ ZERO ] Read file from file system: {0}", file.getAbsolutePath()); final FileBody fileBody = new FileBody(file, contentType); final MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); /* * Custom content disposition * Because Api Gateway will send the request to micro service * It means that the content-disposition must be calculated by api gateway internally * here. * Now it's working to redirect request to micro service. * Related submitted issue: * https://github.com/vert-x3/vertx-web/issues/1137 */ final String disposition = "form-data; name=\"file\"; " + "filename=\"" + fileUpload.fileName() + ""; final FormBodyPart bodyPart = FormBodyPartBuilder.create() .setName("file") .addField("Content-Type", fileUpload.contentType()) .addField("Content-Transfer-Encoding", fileUpload.contentTransferEncoding()) .addField("Content-Disposition", disposition) .setBody(fileBody) .build(); builder.addPart(bodyPart); final HttpEntity entity = builder.build(); request.setEntity(entity); }
private void checkFileUpload(TestContext context, int count, String fileName, String fieldName, String contentType, String uploadsDir, Buffer fileData) { Set<FileUpload> fileUploads = StandarRequestController.fileUploads; context.assertNotNull(fileUploads); context.assertEquals(1, fileUploads.size()); FileUpload upload = fileUploads.iterator().next(); context.assertEquals(fieldName, upload.name()); context.assertEquals(fileName, upload.fileName()); context.assertEquals(contentType, upload.contentType()); context.assertEquals("binary", upload.contentTransferEncoding()); context.assertEquals(fileData.length(), (int) upload.size()); String uploadedFileName = upload.uploadedFileName(); context.assertTrue(uploadedFileName.startsWith(uploadsDir + File.separator)); Buffer uploaded = vertx.fileSystem().readFileBlocking(uploadedFileName); context.assertEquals(fileData, uploaded); }
private void testFileUpload(String uploadsDir, int size) throws Exception { String name = "somename"; String fileName = "somefile.dat"; String contentType = "application/octet-stream"; Buffer fileData = TestUtils.randomBuffer(size); router.route().handler(rc -> { Set<FileUpload> fileUploads = rc.fileUploads(); assertNotNull(fileUploads); assertEquals(1, fileUploads.size()); FileUpload upload = fileUploads.iterator().next(); assertEquals(name, upload.name()); assertEquals(fileName, upload.fileName()); assertEquals(contentType, upload.contentType()); assertEquals("binary", upload.contentTransferEncoding()); assertEquals(fileData.length(), upload.size()); String uploadedFileName = upload.uploadedFileName(); assertTrue(uploadedFileName.startsWith(uploadsDir + File.separator)); Buffer uploaded = vertx.fileSystem().readFileBlocking(uploadedFileName); assertEquals(fileData, uploaded); // the data is upload as HTML form, so the body should be empty Buffer rawBody = rc.getBody(); assertEquals(0, rawBody.length()); rc.response().end(); }); sendFileUploadRequest(fileData, 200, "OK"); }