java Thumbnails压缩图片上传OSS

步骤: 1. 先把文件上传到本地   2.使用google Thumbnails压缩图片   3. 压缩的图片上传OSS   4.删除本地文件

OSS工具类没提供了,随便百度一个都行的

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.io.FileUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

/**
 * 通用请求处理
 *
 * @author ruoyi
 */
@RestController
@Slf4j
@Api(description = "文件上传")
public class CommonController {


    /**
     * 通用上传请求
     */
    @ApiOperation("文件上传")
    @PostMapping("/oss/upload")
    public ApiResult uploadFile(MultipartFile file) throws Exception {
        try {
            return ApiResult.success(OssUtil.fileUpload(file));
        } catch (Exception e) {
            log.error("文件上传失败 {}", e);
            return ApiResult.error(e.getMessage());
        }
    }

    @ApiOperation("文件上传-压缩")
    @PostMapping("/oss/upload1")
    public ApiResult uploadPicture1(MultipartFile multipartfile) throws Exception {
        if (multipartfile.getSize() > 20 * 1024 * 1024) {
            throw new Exception("上传图片大小不能超过20M!");
        }

        //获取图片文件名(不带扩展名的文件名)
        String prefixName = getFileNameWithoutEx(multipartfile.getOriginalFilename());
        //获取图片后缀名,判断如果是png的话就不进行格式转换,因为Thumbnails存在转png->jpg图片变红bug
        String suffixName = getExtensionName(multipartfile.getOriginalFilename());
        //图片存储文件夹
        String filePath = "web/src/main/resources/";
        //图片在项目中的地址(项目位置+图片名,带后缀名)
        String contextPath = filePath + CommonUtils.getStringRandom(5) + prefixName + "." + suffixName;
        //存的项目的中模版图片
        File tempFile = null;
        //上传时从项目中拿到的图片
        File f = null;
        InputStream inputStream = null;
        try {
            //图片在项目中的地址(项目位置+图片名,带后缀名)
            tempFile = new File(contextPath);
            //生成图片文件
            FileUtils.copyInputStreamToFile(multipartfile.getInputStream(), tempFile);
       //压缩图片 Thumbnails.of(contextPath) .scale(1f) .outputQuality(
0.5f) .toFile(contextPath); //获取压缩后的图片 f = new File(contextPath); inputStream = new FileInputStream(f); return ApiResult.success(OssUtil.fileUpload(inputStream, multipartfile.getOriginalFilename())); } catch (Exception e) { log.error("图片上传失败 {}", e); throw new Exception("图片上传失败"); } finally { //将临时文件删除 tempFile.delete(); f.delete(); inputStream.close(); } } /** * 获取文件扩展名 * * @param filename 文件名 * @return */ public static String getExtensionName(String filename) { if ((filename != null) && (filename.length() > 0)) { int dot = filename.lastIndexOf('.'); if ((dot > -1) && (dot < (filename.length() - 1))) { return filename.substring(dot + 1); } } return filename; } /** * 获取不带扩展名的文件名 * * @param filename 文件 * @return */ private static String getFileNameWithoutEx(String filename) { if ((filename != null) && (filename.length() > 0)) { int dot = filename.lastIndexOf('.'); if ((dot > -1) && (dot < (filename.length()))) { return filename.substring(0, dot); } } return filename; }

 

posted on 2019-07-01 13:50  xiaogui918  阅读(2828)  评论(0编辑  收藏  举报

导航