ตัวอย่างการเขียน Spring-boot WebFlux Upload File
pom.xml
...
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
...
หมายเหตุ lombox เป็น annotation code generator ตัวนึงครับ
@SpringBootApplication
@ComponentScan(basePackages = {"com.pamarin"})
public class AppStarter {
public static void main(String[] args) {
SpringApplication.run(AppStarter.class, args);
}
}
@Slf4j
@RestController
public class UploadController {
private static final String UPLOAD_DIRECTORY = "/temp";
@GetMapping({"", "/"})
public Mono<String> hello() {
return Mono.just("Hello world.");
}
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Mono<Map> upload(@RequestPart("file") Mono<FilePart> filePart) {
return filePart
.map((FilePart fp) -> {
String path = UPLOAD_DIRECTORY + "/" + fp.filename();
File file = Paths.get(path).toFile();
fp.transferTo(file);
Map<String, Object> map = new HashMap<>();
map.put("name", file.getName());
map.put("path", path);
map.put("lastModified", file.lastModified());
map.put("size", file.length());
return map;
});
}
}
cd ไปที่ root ของ project จากนั้น
$ mvn clean install
$ mvn spring-boot:run
เปิด browser แล้วเข้า http://localhost:8080
ทดลอง Upload ผ่าน Postman