SpringBoot对接七牛云上传图片(交给spring管理对象)

1.动机

由于首次对接七牛云,所以先在网上浏览了一圈,参考了部分案例。
但是发现网上大部分的案例都没有真正的使用的spring的特性,索性我也来个抛砖引玉,写个例子给后来者参考

2.准备

1、首先引入Maven坐标


<dependency>
    <groupId>com.qiniugroupId>
    <artifactId>qiniu-java-sdkartifactId>
    <version>7.2.29version>
dependency>

<dependency>
    <groupId>net.coobirdgroupId>
    <artifactId>thumbnailatorartifactId>
    <version>0.4.8version>
dependency>

2、配置application.yml信息

qiniu:
	accessKey: **********************
	secretKey: *******************************
	bucket: *******


3、重点在这里,打个比方:明明UploadManager对象可以交给Spring作为单例管理,可是大部分人写第三方API的时候根本没有单例的思想,哪里使用就哪里New一次!!!亏你还一直在使用Spring开发!!!

/**
 * @Author yj 2020/7/3
 * 七牛云配置
 */
@Data
@Component //由于@Configuration 和七牛云的Configuration对象冲突,所以换成@Component
@ConfigurationProperties(prefix="qiniu")
public class QiniuProp implements Serializable {
    private static final long serialVersionUID = -4882402762964443190L;

    /*** qiniu accessKey*/
    private String accessKey;
    /*** qiniu secretKey*/
    private String secretKey;
    /*** qiniu zone*/
    private String bucket;

    @Bean
    public UploadManager upQiniu(){
        return new UploadManager(new Configuration(Region.autoRegion()));
    }
}

4、业务层 注入 UploadManager 使用put方法 上传图片

*生成新的图片名称使用uuid就行了

至于压缩图片可以使用:
Thumbnails.of(inputStream).scale(1f).outputQuality(0.9f).toOutputStream(outputStream);*

    /**
     * 上传图片到七牛云
     *
     * @Author yj
     * @Date 2020/7/3
     **/
    public String upImgToQiniu(MultipartFile file) {
        try {
            //检查文件是否为图片,并返回新的图片名称
            String key = this.checkImage(file);
            //图片压缩
            byte[] uploadBytes = getCompressImg(file);
            Auth auth = Auth.create(qiniuProp.getAccessKey(), qiniuProp.getSecretKey());
            String upToken = auth.uploadToken(qiniuProp.getBucket());
            Response response = uploadManager.put(uploadBytes, key, upToken);
            log.info("[文件服务]七牛云上传图片response返回:{}", response.bodyString());
            if (!response.isOK()) {
                throw new GlobalException(ResultEnum.UPLOAD_FILE_ERROR);
            }
            return uploadImgProp.getImgBaseUrl() + key;
        } catch (IOException e) {
            log.error("[文件服务]文件上传失败", e);
            throw new GlobalException(ResultEnum.UPLOAD_FILE_ERROR);
        }
    }

你可能感兴趣的:(图片上传)