From f0547e018191b587ee0f8f6aac00652564727d11 Mon Sep 17 00:00:00 2001 From: YY <1272464982@qq.com> Date: Wed, 18 Jun 2025 17:06:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=8E=A5=E5=8F=A3=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ebtp/supplier/base/config/WebConfig.java | 22 +++++++++ .../supplier/base/constant/UpConstant.java | 5 ++- .../base/controller/FileController.java | 45 +++++++++++++++++++ .../base/service/FileStorageService.java | 43 ++++++++++++++++++ 4 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/config/WebConfig.java create mode 100644 src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/controller/FileController.java create mode 100644 src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/service/FileStorageService.java diff --git a/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/config/WebConfig.java b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/config/WebConfig.java new file mode 100644 index 0000000..f0312c1 --- /dev/null +++ b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/config/WebConfig.java @@ -0,0 +1,22 @@ +package com.chinaunicom.zyhy.ebtp.supplier.base.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.nio.file.Paths; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Value("${file.upload-dir}") + private String uploadDir; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + String absolutePath = Paths.get(uploadDir).toAbsolutePath().toUri().toString(); + registry.addResourceHandler("/files/**") + .addResourceLocations(absolutePath); + } +} diff --git a/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/constant/UpConstant.java b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/constant/UpConstant.java index d210b05..a7fc327 100644 --- a/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/constant/UpConstant.java +++ b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/constant/UpConstant.java @@ -1,7 +1,10 @@ package com.chinaunicom.zyhy.ebtp.supplier.base.constant; public interface UpConstant { - + /** + * 草稿 + */ + public static final Long DRAFT = 0L; /** * 上架 */ diff --git a/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/controller/FileController.java b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/controller/FileController.java new file mode 100644 index 0000000..de5b2e6 --- /dev/null +++ b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/controller/FileController.java @@ -0,0 +1,45 @@ +package com.chinaunicom.zyhy.ebtp.supplier.base.controller; + +import com.chinaunicom.zyhy.ebtp.supplier.base.service.FileStorageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api/files") +public class FileController { + + @Autowired + private FileStorageService fileStorageService; + + @Value("${file.upload-dir}") + private String uploadDir; + + + + @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public Map upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) { + String baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort(); + + String filename = fileStorageService.storeFile(file); + String fileUrl = baseUrl+"/files/" + filename; + + + Map response = new HashMap<>(); + response.put("fileName", filename); + response.put("fileType", file.getContentType()); + response.put("fileSize", file.getSize()); + response.put("url", fileUrl); + response.put("filePath", uploadDir + "/"+filename); + + return response; + } + +} diff --git a/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/service/FileStorageService.java b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/service/FileStorageService.java new file mode 100644 index 0000000..96f43a0 --- /dev/null +++ b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/base/service/FileStorageService.java @@ -0,0 +1,43 @@ +package com.chinaunicom.zyhy.ebtp.supplier.base.service; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.UUID; + +@Service +public class FileStorageService { + + @Value("${file.upload-dir}") + private String uploadDir; + + public String storeFile(MultipartFile file) { + try { + String originalName = StringUtils.cleanPath(file.getOriginalFilename()); + String ext = ""; + + int i = originalName.lastIndexOf("."); + if (i >= 0) { + ext = originalName.substring(i); + } + + String filename = UUID.randomUUID().toString() + ext; + Path copyLocation = Paths.get(uploadDir).toAbsolutePath().normalize().resolve(filename); + + Files.createDirectories(copyLocation.getParent()); + Files.copy(file.getInputStream(), copyLocation, StandardCopyOption.REPLACE_EXISTING); + + return filename; + + } catch (IOException ex) { + throw new RuntimeException("Could not store file: " + ex.getMessage()); + } + } +}