青核后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

183 lines
6.5 KiB

package com.campus.controller;
import com.campus.dto.response.FileUploadResponse;
import com.campus.util.OssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@RestController
@RequestMapping("/api/file")
@CrossOrigin
public class FileUploadController {
@Autowired
private OssUtil ossUtil;
/**
* 通用文件上传
*/
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public FileUploadResponse uploadFile(
@RequestParam("file") MultipartFile file,
@RequestParam(value = "folder", defaultValue = "images") String folder) {
log.info("上传文件: {}, 文件夹: {}", file.getOriginalFilename(), folder);
String url = ossUtil.uploadFile(file, folder);
return FileUploadResponse.builder()
.url(url)
.fileName(file.getOriginalFilename())
.fileSize(file.getSize())
.fileType(file.getContentType())
.build();
}
/**
* 上传图片
*/
@PostMapping(value = "/upload/image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public FileUploadResponse uploadImage(@RequestParam("file") MultipartFile file) {
String url = ossUtil.uploadImage(file);
return FileUploadResponse.builder()
.url(url)
.fileName(file.getOriginalFilename())
.fileSize(file.getSize())
.fileType(file.getContentType())
.build();
}
/**
* 上传视频
*/
@PostMapping(value = "/upload/video", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public FileUploadResponse uploadVideo(@RequestParam("file") MultipartFile file) {
long startTime = System.currentTimeMillis();
String url = ossUtil.uploadVideo(file);
long elapsed = System.currentTimeMillis() - startTime;
log.info("视频上传完成: {}, 大小: {}MB, 总耗时: {}ms",
file.getOriginalFilename(),
String.format("%.1f", file.getSize() / 1024.0 / 1024.0),
elapsed);
return FileUploadResponse.builder()
.url(url)
.fileName(file.getOriginalFilename())
.fileSize(file.getSize())
.fileType(file.getContentType())
.build();
}
/**
* 上传文档
*/
@PostMapping(value = "/upload/document", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public FileUploadResponse uploadDocument(@RequestParam("file") MultipartFile file) {
String url = ossUtil.uploadDocument(file);
return FileUploadResponse.builder()
.url(url)
.fileName(file.getOriginalFilename())
.fileSize(file.getSize())
.fileType(file.getContentType())
.build();
}
/**
* 上传头像
*/
@PostMapping(value = "/upload/avatar", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public FileUploadResponse uploadAvatar(@RequestParam("file") MultipartFile file) {
String url = ossUtil.uploadAvatar(file);
return FileUploadResponse.builder()
.url(url)
.fileName(file.getOriginalFilename())
.fileSize(file.getSize())
.fileType(file.getContentType())
.build();
}
/**
* 批量上传文件
*/
@PostMapping(value = "/upload/batch", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Map<String, Object> uploadFiles(
@RequestParam("files") MultipartFile[] files,
@RequestParam(value = "folder", defaultValue = "images") String folder) {
log.info("批量上传文件数: {}, 文件夹: {}", files.length, folder);
List<FileUploadResponse> responses = new ArrayList<>();
for (MultipartFile file : files) {
String url = ossUtil.uploadFile(file, folder);
responses.add(FileUploadResponse.builder()
.url(url)
.fileName(file.getOriginalFilename())
.fileSize(file.getSize())
.fileType(file.getContentType())
.build());
}
Map<String, Object> result = new HashMap<>();
result.put("successCount", responses.size());
result.put("files", responses);
return result;
}
/**
* 批量上传图片
*/
@PostMapping(value = "/upload/images", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Map<String, Object> uploadImages(@RequestParam("files") MultipartFile[] files) {
List<FileUploadResponse> responses = new ArrayList<>();
for (MultipartFile file : files) {
String url = ossUtil.uploadImage(file);
responses.add(FileUploadResponse.builder()
.url(url)
.fileName(file.getOriginalFilename())
.fileSize(file.getSize())
.fileType(file.getContentType())
.build());
}
Map<String, Object> result = new HashMap<>();
result.put("successCount", responses.size());
result.put("urls", responses.stream().map(FileUploadResponse::getUrl).collect(Collectors.toList()));
result.put("files", responses);
return result;
}
/**
* 删除文件
*/
@DeleteMapping("/delete")
public Map<String, String> deleteFile(@RequestParam("url") String url) {
log.info("删除文件: {}", url);
ossUtil.deleteFile(url);
Map<String, String> result = new HashMap<>();
result.put("message", "文件删除成功");
result.put("url", url);
return result;
}
/**
* 批量删除文件
*/
@DeleteMapping("/delete/batch")
public Map<String, Object> deleteFiles(@RequestBody List<String> urls) {
log.info("批量删除文件数: {}", urls.size());
ossUtil.deleteFiles(urls);
Map<String, Object> result = new HashMap<>();
result.put("message", "文件批量删除成功");
result.put("count", urls.size());
result.put("urls", urls);
return result;
}
}