| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package com.supervision.web.noticeManage.controller;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.http.ResponseEntity;
- import org.springframework.util.StringUtils;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.*;
- import java.nio.file.*;
- import java.time.LocalDate;
- import java.time.format.DateTimeFormatter;
- import java.util.*;
- @RestController
- @RequestMapping("/notice")
- public class FileController {
- @Value("${file.upload-dir}")
- private String uploadDir;
- @Value("${file.url-prefix}")
- private String urlPrefix;
- @PostMapping("/upload")
- public ResponseEntity<?> upload(@RequestParam("file") MultipartFile file) {
- if (file == null || file.isEmpty()) {
- return ResponseEntity.badRequest().body(Collections.singletonMap("message", "文件为空"));
- }
- try {
- // 按日期分目录: yyyy/MM/dd
- String sub = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
- Path dir = Paths.get(uploadDir, sub);
- if (!Files.exists(dir)) Files.createDirectories(dir);
- String original = StringUtils.cleanPath(Objects.requireNonNull(file.getOriginalFilename()));
- String ext = "";
- int idx = original.lastIndexOf('.');
- if (idx >= 0) ext = original.substring(idx);
- String filename = UUID.randomUUID().toString().replace("-", "") + ext;
- Path target = dir.resolve(filename);
- try (InputStream in = file.getInputStream()) {
- Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING);
- }
- // 返回相对 URL:/files/yyyy/MM/dd/filename.ext
- String fileUrl = urlPrefix + "/" + sub + "/" + filename;
- Map<String, Object> body = new HashMap<>();
- body.put("url", fileUrl);
- body.put("contentType", file.getContentType());
- return ResponseEntity.ok(body);
- } catch (IOException e) {
- e.printStackTrace();
- return ResponseEntity.status(500).body(Collections.singletonMap("message", "上传失败"));
- }
- }
- }
|