123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- package com.hys.app.controller.base;
- import cn.hutool.core.collection.ListUtil;
- import com.hys.app.framework.exception.ResourceNotFoundException;
- import com.hys.app.framework.exception.ServiceException;
- import com.hys.app.framework.util.ArrayUtils;
- import com.hys.app.framework.util.FileUtil;
- import com.hys.app.model.base.dto.FileDTO;
- import com.hys.app.model.base.vo.FileVO;
- import com.hys.app.model.errorcode.SystemErrorCode;
- import com.hys.app.service.base.service.FileManager;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiImplicitParam;
- import io.swagger.annotations.ApiOperation;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.mock.web.MockMultipartFile;
- import org.springframework.web.bind.annotation.DeleteMapping;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.multipart.MultipartFile;
- import springfox.documentation.annotations.ApiIgnore;
- import javax.imageio.ImageIO;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.util.List;
- import java.util.Locale;
- import java.util.UUID;
- /**
- * 存储方案控制器
- *
- * @author zh
- * @version v7.0.0
- * @since v7.0.0
- * 2018-03-22 10:54:47
- */
- @RestController
- @RequestMapping("/uploaders")
- @Api(description = "上传图片api")
- public class FileBaseController {
- @Autowired
- private FileManager fileManager;
- @ApiOperation(value = "文件上传", response = FileVO.class)
- @ApiImplicitParam(name = "scene", value = "业务场景", allowableValues = "goods,shop,member,other", required = true, dataType = "String", paramType = "query")
- @PostMapping
- public FileVO list(MultipartFile file, String scene) throws IOException {
- if (file != null && file.getOriginalFilename() != null) {
- //文件类型
- String contentType = file.getContentType();
- //获取文件名称
- String ext = contentType.substring(contentType.lastIndexOf("/") + 1, contentType.length());
- //如果是图片类型 则验证不允许上传超过2M
- if (FileUtil.isAllowUpImg(ext)) {
- if (!FileUtil.checkFileSize(file.getSize(), 5, "M")) {
- throw new ServiceException(SystemErrorCode.E901.code(), "图片超过上传限制大小,请上传5M以内图片");
- }
- }
- if (!FileUtil.isAllowUpFile(ext)) {
- throw new ServiceException(SystemErrorCode.E901.code(), "不允许上传的文件格式,请上传gif,jpg,png,jpeg,mp4,pdf,mov格式文件。");
- }
- FileDTO input = new FileDTO();
- input.setName(file.getOriginalFilename());
- input.setStream(file.getInputStream());
- input.setExt(ext);
- return this.fileManager.upload(input, scene);
- } else {
- throw new ResourceNotFoundException("没有文件");
- }
- }
- @ApiOperation(value = "文件删除")
- @ApiImplicitParam(name = "file_path", value = "文件路径", required = true, dataType = "String", paramType = "query")
- @DeleteMapping
- public String delete(@ApiIgnore String filePath) {
- this.fileManager.deleteFile(filePath);
- return null;
- }
- @ApiOperation(value = "文件上传", response = FileVO.class)
- @ApiImplicitParam(name = "scene", value = "业务场景", allowableValues = "goods,shop,member,other", required = true, dataType = "String", paramType = "query")
- @PostMapping("uploadSmall")
- public FileVO uploadSmall(MultipartFile file, String scene) throws IOException {
- if (file != null && file.getOriginalFilename() != null) {
- //文件类型
- String contentType = file.getContentType();
- //获取文件名称
- String ext = contentType.substring(contentType.lastIndexOf("/") + 1, contentType.length());
- String jpg = ext.substring(contentType.lastIndexOf(".") + 1, ext.length());
- //如果是图片类型 则验证不允许上传超过2M
- if (FileUtil.isAllowUpImg(ext)) {
- if (!FileUtil.checkFileSize(file.getSize(), 2, "M")) {
- throw new ServiceException(SystemErrorCode.E901.code(), "图片超过上传限制大小,请上传2M以内图片");
- }
- }
- if (!FileUtil.isAllowUpFile(ext)) {
- throw new ServiceException(SystemErrorCode.E901.code(), "不允许上传的文件格式,请上传gif,jpg,png,jpeg,mp4,pdf,mov格式文件。");
- }
- String fileName = file.getOriginalFilename();
- String newName = UUID.randomUUID().toString() + fileName.substring(fileName.indexOf("."));
- // 获取当前操作系统
- String osName = System.getProperties().get("os.name").toString().toLowerCase(Locale.ROOT);
- String path = "";
- if (osName.startsWith("win")) {
- path = "D:\\Test\\";
- } else {
- path = "/mnt/test";
- }
- File saveFile = new File(path + newName);
- if (!saveFile.getParentFile().exists()) {
- saveFile.getParentFile().mkdirs();
- }
- file.transferTo(saveFile);
- String path1 = saveFile.getPath();
- File inputFile = new File(path1);
- BufferedImage inputImage = ImageIO.read(inputFile);
- // 创建一个新的缓冲图片
- BufferedImage outputImage = new BufferedImage(80, 80, inputImage.getType());
- // 绘制并缩放原图片到新图片中
- outputImage.getGraphics().drawImage(inputImage.getScaledInstance(80, 80, BufferedImage.SCALE_SMOOTH), 0, 0, null);
- // 写入到输出文件
- String newNameSmall ="small"+ newName ;
- File outputFile = new File(path + newNameSmall);
- ImageIO.write(outputImage, jpg, outputFile); // 根据原图片格式选择"jpg", "png"等
- File inputFile2 = new File(path + newNameSmall);
- FileInputStream input2 = new FileInputStream(inputFile2);
- MultipartFile multipartFile2 = new MockMultipartFile("file", newName, "text/plain", input2);
- FileDTO fileDTO2 = new FileDTO();
- fileDTO2.setName(multipartFile2.getOriginalFilename());
- fileDTO2.setStream(multipartFile2.getInputStream());
- fileDTO2.setExt(ext);
- FileVO upload2 = this.fileManager.upload(fileDTO2, scene);
- upload2.setType("small");
- inputFile2.delete();
- inputFile.delete();
- return upload2;
- } else {
- throw new ResourceNotFoundException("没有文件");
- }
- }
- }
|