From f42ccfc33bb490ee8c44456c52d19700574f6a50 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Fri, 23 Dec 2022 19:59:18 +0900 Subject: [PATCH] #28 bulk upload - multipart file --- .../example/bulkupload/config/WebConfig.java | 16 +++++++ .../bulkupload/controller/MainController.java | 47 +++++++++++++++++++ .../controller/TusUploadController.java | 2 + bulkupload/src/main/resources/application.yml | 2 +- .../src/main/resources/templates/index.html | 2 +- 5 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 bulkupload/src/main/java/com/example/bulkupload/config/WebConfig.java create mode 100644 bulkupload/src/main/java/com/example/bulkupload/controller/MainController.java diff --git a/bulkupload/src/main/java/com/example/bulkupload/config/WebConfig.java b/bulkupload/src/main/java/com/example/bulkupload/config/WebConfig.java new file mode 100644 index 00000000..06801ded --- /dev/null +++ b/bulkupload/src/main/java/com/example/bulkupload/config/WebConfig.java @@ -0,0 +1,16 @@ +package com.example.bulkupload.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + public static final String ALLOWED_METHOD_NAMES = "GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,PATCH"; + + @Override + public void addCorsMappings(final CorsRegistry registry) { + registry.addMapping("/**") + .allowedMethods(ALLOWED_METHOD_NAMES.split(",")); + } +} \ No newline at end of file diff --git a/bulkupload/src/main/java/com/example/bulkupload/controller/MainController.java b/bulkupload/src/main/java/com/example/bulkupload/controller/MainController.java new file mode 100644 index 00000000..e79fc76c --- /dev/null +++ b/bulkupload/src/main/java/com/example/bulkupload/controller/MainController.java @@ -0,0 +1,47 @@ +package com.example.bulkupload.controller; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Slf4j +@Controller +public class MainController { + + @GetMapping("/") + public String index() { + return "index"; + } + + @GetMapping("/upload") + public String test() { + return "upload-form"; + } + + @PostMapping("/upload") + public String saveFile(@RequestParam MultipartFile file + , HttpServletRequest request) throws IOException { + log.info("request = {}", request); + log.info("multipartFile = {}", file); + + if (!file.isEmpty()) { + Path filepath = Paths.get("dest/", file.getOriginalFilename()); + + try (OutputStream os = Files.newOutputStream(filepath)) { + os.write(file.getBytes()); + } + } + + return "upload-form"; + } +} \ No newline at end of file diff --git a/bulkupload/src/main/java/com/example/bulkupload/controller/TusUploadController.java b/bulkupload/src/main/java/com/example/bulkupload/controller/TusUploadController.java index 2ad5ff57..8f14f76f 100644 --- a/bulkupload/src/main/java/com/example/bulkupload/controller/TusUploadController.java +++ b/bulkupload/src/main/java/com/example/bulkupload/controller/TusUploadController.java @@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -19,6 +20,7 @@ public class TusUploadController { private final FileUploadService fileUploadService; + @CrossOrigin(origins = "*") @RequestMapping(value = {"/api/tus/file/upload", "/api/tus/file/upload/**"}) public ResponseEntity uploadWithTus(HttpServletRequest request, HttpServletResponse response) { // Process a tus upload request diff --git a/bulkupload/src/main/resources/application.yml b/bulkupload/src/main/resources/application.yml index 845f33a8..00c6be58 100644 --- a/bulkupload/src/main/resources/application.yml +++ b/bulkupload/src/main/resources/application.yml @@ -2,7 +2,7 @@ tus: server: data: directory: "/Users/bobby/Downloads/tus" - expiration: 60000 + expiration: 86400000 spring: servlet: diff --git a/bulkupload/src/main/resources/templates/index.html b/bulkupload/src/main/resources/templates/index.html index c52f96a0..769a233c 100644 --- a/bulkupload/src/main/resources/templates/index.html +++ b/bulkupload/src/main/resources/templates/index.html @@ -94,7 +94,7 @@ let upload = new tus.Upload(file, { // endpoint : 'https://tusd.tusdemo.net/files/', - endpoint: "/api/tus/file/upload", + endpoint: "http://169.254.130.102:8080/api/tus/file/upload", chunkSize, retryDelays: [0, 1000, 3000, 5000], metadata: {