plugins {
id 'org.springframework.boot' version '2.3.3.RELEASE'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
}
group = 'com.carvia'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
testImplementation 'io.projectreactor:reactor-test'
}
test {
useJUnitPlatform()
}
Spring Webclient multipart file upload
Upasana | September 12, 2020 | 2 min read | 16 views
In this article we will learn how to use Spring 5 WebClient for multipart file upload to a remote file upload server.
Prerequisites
-
Spring Boot 2.3.3
-
IDE - IntelliJ or Eclipse
-
Java 8/11
-
File upload server refer to this post
Upload server setup
Make sure you have a file upload server up and running. Follow instructions from this article.
Gradle setup
We will create a Spring Boot project using https://start.spring.io/ and edit the build.gradle with the following changes:
build.gradle
Spring 5 Webclient
Now we will create a WebClient based client that will take a file and upload it to remote service.
ReactiveFileUploadClient.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.HttpEntity;
import org.springframework.http.MediaType;
import org.springframework.http.client.MultipartBodyBuilder;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;
import java.io.File;
@RestController
public class ReactiveFileUploadClient {
@Autowired
private WebClient.Builder webClientBuilder; (1)
@GetMapping(value = "/client")
public void upload() {
final WebClient webClient = webClientBuilder.build();
webClient.post()
.uri("http://localhost:8080/upload")
.contentType(MediaType.MULTIPART_FORM_DATA)
.body(BodyInserters.fromMultipartData(fromFile(new File("HELP.md"))))
.retrieve()
.bodyToMono(String.class) (2)
.block(); (3)
}
public MultiValueMap<String, HttpEntity<?>> fromFile(File file) {
MultipartBodyBuilder builder = new MultipartBodyBuilder();
builder.part("file", new FileSystemResource(file));
return builder.build();
}
}
1 | Spring Boot auto configures a WebClientBuilder instance for us. |
2 | Our upload server returns a string response success |
3 | We are blocking the current thread till we receive the response from server. We can choose not to do so and move forward. |
Using RestTemplate multipart file upload
That’s all.
Top articles in this category:
- Spring Boot multipart file upload server
- Multipart file upload with RestTemplate
- S3 File upload & download with AWS Java SDK v2
- Download a file using Spring RestTemplate
- Disable SSL verification in Spring WebClient
- Spring Boot WebClient Basic Authentication
- Send Gupshup SMS using Java API
Recommended books for interview preparation:
Book you may be interested in..
Book you may be interested in..