123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package com.controller.common;
- import cn.com.ty.lift.common.utils.ValuePool;
- import cn.com.ty.lift.common.verify.Validate;
- import cn.hutool.core.util.ArrayUtil;
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.mybatisplus.core.toolkit.IdWorker;
- import lombok.AllArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.multipart.MultipartFile;
- import java.time.LocalDate;
- import java.time.format.DateTimeFormatter;
- import java.util.*;
- /**
- * 图片上传接口
- */
- @Slf4j
- @AllArgsConstructor
- @RestController
- @RequestMapping("common")
- public class CommonController {
- private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd");
- private SystemConfiguration systemConfiguration;
- /**
- * 批量上传多个文件
- *
- * @param files 文件列表
- * @return RestResponse
- */
- @PostMapping("uploads")
- public RestResponse uploads(@RequestParam("files") MultipartFile[] files) {
- Validate.notTrue(ArrayUtil.isEmpty(files), ValuePool.UPLOAD_DATA_MISSING);
- Map<String, MultipartFile> fileMap = new HashMap<>();
- //1 先解析文件格式
- for (MultipartFile file : files) {
- String fileName = handleFile(file);
- fileMap.put(fileName, file);
- }
- //2 批量上传
- try {
- List<String> urls = new ArrayList<>();
- for (Map.Entry<String, MultipartFile> entry : fileMap.entrySet()) {
- String url = systemConfiguration.build().putObject(entry.getKey(), entry.getValue().getBytes());
- log.info("upload file complete, file URL: {}", url);
- Validate.notNull(url, ValuePool.UPLOAD_FAIL);
- urls.add(url);
- }
- return RestResponse.success(urls);
- } catch (Exception e) {
- log.error("upload file occur exception", e);
- return RestResponse.fail(ValuePool.UPLOAD_FAIL);
- }
- }
- /**
- * 上传单个文件
- *
- * @param file 上传的文件
- * @return RestResponse
- */
- @PostMapping("upload")
- public RestResponse upload(@RequestParam("file") MultipartFile file) {
- Validate.notTrue(Objects.isNull(file) || file.isEmpty(), ValuePool.UPLOAD_DATA_MISSING);
- String fileName = handleFile(file);
- try {
- String url = systemConfiguration.build().putObject(fileName, file.getBytes());
- log.info("upload file complete, file URL: {}", url);
- return RestResponse.success(url);
- } catch (Exception e) {
- log.error("upload file occur exception", e);
- return RestResponse.fail(ValuePool.UPLOAD_FAIL);
- }
- }
- /**
- * 校验文件大小,文件格式,生成新文件名
- *
- * @param file the {@link MultipartFile} to upload
- * @return the name string of the file.
- */
- private String handleFile(MultipartFile file) {
- Validate.notTrue(Objects.isNull(file) || file.isEmpty(), ValuePool.UPLOAD_DATA_MISSING);
- // 获取文件名,带后缀
- String originalFilename = file.getOriginalFilename();
- log.info("the original file name:{}", originalFilename);
- // 获取文件的后缀格式
- Validate.notNull(originalFilename, ValuePool.UPLOAD_ORIGINAL_NAME_MISSING);
- int lastDotIndex = originalFilename.lastIndexOf(ValuePool.DOT);
- Validate.notTrue(-1 == lastDotIndex, ValuePool.UPLOAD_FORMAT_MISSING);
- String fileSuffix = originalFilename.substring(lastDotIndex).toLowerCase();
- Validate.notNull(fileSuffix, ValuePool.UPLOAD_FORMAT_ILLEGAL);
- long fileSize = file.getSize();
- log.info("the size of file: {}", fileSize);
- if (StrUtil.equalsAny(fileSuffix, ValuePool.UPLOAD_PICS)) {
- Validate.notTrue(fileSize > ValuePool.UPLOAD_MAX_SIZE_PIC, ValuePool.UPLOAD_MAX_SIZE_PIC_DESC);
- } else if (StrUtil.equalsAny(fileSuffix, ValuePool.UPLOAD_FILES)) {
- Validate.notTrue(fileSize > ValuePool.UPLOAD_MAX_SIZE_FILE, ValuePool.UPLOAD_MAX_SIZE_FILE_DESC);
- } else if (StrUtil.equalsAny(fileSuffix, ValuePool.UPLOAD_VIDEOS)) {
- Validate.notTrue(fileSize > ValuePool.UPLOAD_MAX_SIZE_VIDEO, ValuePool.UPLOAD_MAX_SIZE_VIDEO_DESC);
- } else {
- throw Validate.validateException(ValuePool.UPLOAD_FORMAT_NOT_SUPPORT);
- }
- String fileName = StrUtil.format("{}/{}{}", DATE_TIME_FORMATTER.format(LocalDate.now()), IdWorker.getIdStr(), fileSuffix);
- log.info("the new file name:{}", fileName);
- return fileName;
- }
- }
|