Quarkus File Upload Example
This article shows 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 Structure:
Maven dependencies(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
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
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
Build application jar file: mvn clean package
Start application: java -jar quarkus-run.jar
API testing using postman:
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