Quarkus File Upload Example
In this section, we will show you how to upload multiple files in the Quarkus application.
- QUARKUS + Hibernate CRUD example - Creating a CRUD REST API/Service
- Build REST CRUD APIs with Quarkus and MyBatis
- Create Quarkus Project With code.quarkus.io: Hello world example
- Quarkus - How to send email via SMTP - Quickstart
- Quarkus - Qute - Hello World Example
- Quarkus + Maven Hello World Example
- Configuring the HTTP Port on Quarkus Applications
- Quarkus - Interview questions and answers
Technologies used:
- Quarkus 2.2.3.Final
- rest-easy-multipart 2.2.3:Final
- Java 11
- Maven 3
- H2DB
Project Directory
pom.xml
<?xml version="1.0"?><project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>com.knf.dev.demo</groupId> <artifactId>quarkus-upload-file</artifactId> <version>1.0.0-SNAPSHOT</version> <properties> <compiler-plugin.version>3.8.1</compiler-plugin.version> <maven.compiler.parameters>true</maven.compiler.parameters> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id> <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id> <quarkus.platform.version>2.2.3.Final</quarkus.platform.version> <surefire-plugin.version>3.0.0-M5</surefire-plugin.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>${quarkus.platform.artifact-id}</artifactId> <version>${quarkus.platform.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- Server dependencies --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy</artifactId> </dependency> <!-- Client dependencies --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-rest-client</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-multipart</artifactId> </dependency> <!-- Test dependencies --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-junit5</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.platform.version}</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>build</goal> <goal>generate-code</goal> <goal>generate-code-tests</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>${compiler-plugin.version}</version> <configuration> <parameters> ${maven.compiler.parameters} </parameters> </configuration> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>${surefire-plugin.version}</version> <configuration> <systemPropertyVariables> <java.util.logging.manager> org.jboss.logmanager.LogManager </java.util.logging.manager> <maven.home>${maven.home}</maven.home> </systemPropertyVariables> </configuration> </plugin> </plugins> </build> <profiles> <profile> <id>native</id> <activation> <property> <name>native</name> </property> </activation> <build> <plugins> <plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>${surefire-plugin.version}</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <systemPropertyVariables> <native.image.path>${project.build.directory}/${project.build.finalName}-runner </native.image.path> <java.util.logging.manager>org.jboss.logmanager.LogManager </java.util.logging.manager> <maven.home> ${maven.home} </maven.home> </systemPropertyVariables> </configuration> </execution> </executions> </plugin> </plugins> </build> <properties> <quarkus.package.type> native </quarkus.package.type> </properties> </profile> </profiles></project>
Fileuploadservice.java
package com.knf.dev.demo;
import org.apache.commons.io.IOUtils;import org.eclipse.microprofile.config.inject.ConfigProperty;import org.jboss.resteasy.plugins.providers.multipart.InputPart;import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;import javax.inject.Singleton;import javax.ws.rs.core.MultivaluedMap;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.nio.file.Files;import java.nio.file.Paths;import java.nio.file.StandardOpenOption;import java.util.ArrayList;import java.util.List;import java.util.Map;
@Singletonpublic class FileUploadService {
@ConfigProperty(name = "upload.directory") String UPLOAD_DIR;
public String uploadFile(MultipartFormDataInput input) { Map<String, List<InputPart>> uploadForm = input.getFormDataMap(); List<String> fileNames = new ArrayList<>(); List<InputPart> inputParts = uploadForm.get("file"); String fileName = null; for (InputPart inputPart : inputParts) { try { MultivaluedMap<String, String> header = inputPart.getHeaders(); fileName = getFileName(header); fileNames.add(fileName); InputStream inputStream = inputPart.getBody(InputStream.class, null); writeFile(inputStream,fileName); } catch (Exception e) { e.printStackTrace(); } } return "Files Successfully Uploaded"; }
private void writeFile(InputStream inputStream,String fileName) throws IOException { byte[] bytes = IOUtils.toByteArray(inputStream); File customDir = new File(UPLOAD_DIR); fileName = customDir.getAbsolutePath() + File.separator + fileName; Files.write(Paths.get(fileName), bytes, StandardOpenOption.CREATE_NEW); }
private String getFileName(MultivaluedMap<String, String> header) { String[] contentDisposition = header. getFirst("Content-Disposition").split(";"); for (String filename : contentDisposition) { if ((filename.trim().startsWith("filename"))) { String[] name = filename.split("="); String finalFileName = name[1].trim().replaceAll("\"", ""); return finalFileName; } } return ""; }}
MultiFileUploadController.java
package com.knf.dev.demo;
import org.jboss.resteasy.annotations.providers.multipart.MultipartForm;import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;import javax.inject.Inject;import javax.ws.rs.Consumes;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.core.MediaType;import javax.ws.rs.core.Response;
@Path("/upload")public class MultiFileUploadController {
@Inject FileUploadService fileUploadService;
@POST @Path("/files") @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.TEXT_PLAIN) public Response fileUpload(@MultipartForm MultipartFormDataInput input) { return Response.ok(). entity(fileUploadService.uploadFile(input)).build(); }}
application.properties
upload.directory= /home/user/Pictures/files
Run the Application
Build application jar file: mvn clean package
Start application: java -jar quarkus-run.jar
Test API
More Quarkus Related topics,
- QUARKUS + Hibernate CRUD example - Creating a CRUD REST API/Service
- Build REST CRUD APIs with Quarkus and MyBatis
- Create Quarkus Project With code.quarkus.io: Hello world example
- Quarkus - How to send email via SMTP - Quickstart
- Quarkus - Qute - Hello World Example
- Quarkus + Maven Hello World Example
- Configuring the HTTP Port on Quarkus Applications
- Quarkus - Interview questions and answers