SpringBoot---SpringBoot整合七牛云上传图片

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
.cn 域名,1个 12个月
简介: SpringBoot---SpringBoot整合七牛云上传图片

准备工作

1.注册并实名认证七牛云账号

不进行实名认证将不能创建空间,审核最多需要三个工作日,但通常实名认证过后1~2个小时就能收到认证成功的信息。

2.创建空间

3.获取几个重要信息

  • AK 和 SK

  • 空间名称

也就是创建空间时自己去的名字

  • 临时域名

代码

1.yml配置

oss:
  qiniu:
    domain: qtxxxxxxxx.hn-xxx.xxxxx.com # 访问域名(默认使用七牛云测试域名)
    accessKey: Gn0uwxxxxxxxxxxxxxxxxxxxxy3GEVmZqR58ed # 公钥 刚才的AK
    secretKey: hs-ScVOxxxxxxxxxxxo0yG33uHm8_NkmnKy # 私钥 刚才的SK
    bucketName: officxxxxxxxxxxicture  #存储空间名称

配置类

package studio.banner.officialwebsite.config;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * @Author: Re
 * @Date: 2021/5/15 20:48
 */
@Data
@Component
public class QiNiuYunConfig {
    /**
     * 七牛域名domain
     */
    @Value("${oss.qiniu.domain}")
    private String qiniuDomain;
    /**
     * 七牛ACCESS_KEY
     */
    @Value("${oss.qiniu.accessKey}")
    private String qiniuAccessKey;
    /**
     * 七牛SECRET_KEY
     */
    @Value("${oss.qiniu.secretKey}")
    private String qiniuSecretKey;
    /**
     * 七牛空间名
     */
    @Value("${oss.qiniu.bucketName}")
    private String qiniuBucketName;
}

2.Service接口

package studio.banner.officialwebsite.service;
import java.io.FileInputStream;
/**
 * @Author: Re
 * @Date: 2021/5/15 22:42
 */
public interface IQiNiuYunService {
    /**
     * 上传照片
     * @return
     * @param file
     * @param path
     */
    String updatePhoto(String path, FileInputStream file);
}

3.Service实现

package studio.banner.officialwebsite.service.Impl;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import studio.banner.officialwebsite.config.QiNiuYunConfig;
import studio.banner.officialwebsite.service.IQiNiuYunService;
import java.io.FileInputStream;
/**
 * @Author: Re
 * @Date: 2021/5/15 22:43
 */
@Service
public class QiNiuYunServiceImpl implements IQiNiuYunService {
    protected static Logger logger = LoggerFactory.getLogger(QiNiuYunServiceImpl.class);
    @Autowired
    QiNiuYunConfig qiNiuYunConfig;
    @Override
    public String updatePhoto(String key, FileInputStream file) {
        /**
         * 构造一个带指定Region对象的配置类
         */
        Configuration cfg = new Configuration(Region.region2());
        /**
         * 其他参数参考类注释
         */
        UploadManager uploadManager = new UploadManager(cfg);
        /**
         * 生成上传凭证,然后准备上传
         */
        logger.info("密钥信息"+qiNiuYunConfig.getQiniuBucketName()+qiNiuYunConfig.getQiniuAccessKey()+qiNiuYunConfig.getQiniuSecretKey());
        Auth auth = Auth.create(qiNiuYunConfig.getQiniuAccessKey(), qiNiuYunConfig.getQiniuSecretKey());
        String upToken = auth.uploadToken(qiNiuYunConfig.getQiniuBucketName());
        try {
            Response response = uploadManager.put(file, key, upToken,null,null);
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            logger.info(putRet.key);
            logger.info(putRet.hash);
        } catch (QiniuException ex) {
            Response r = ex.response;
            logger.error(r.toString());
            try {
                logger.error(r.bodyString());
            } catch (QiniuException e) {
                r = e.response;
                logger.error(r.toString());
            }
        }
        return "http://"+qiNiuYunConfig.getQiniuDomain()+"/"+key;
    }
}

4.Controller层

package studio.banner.officialwebsite.controller.background;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import studio.banner.officialwebsite.service.IQiNiuYunService;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;
/**
 * @Author: Re
 * @Date: 2021/5/16 7:55
 */
@RestController
@Api(tags = "上传图片接口",value = "UploadPhotoController")
public class UploadPhotoController {
    @Autowired
    protected IQiNiuYunService qiNiuYunService;
    @PostMapping("/upload")
    @ApiOperation(value = "上传图片",notes = "上传图片不能为空",httpMethod = "POST")
    public String upload(@RequestPart MultipartFile file) {
        // 获取文件名
        String fileName = file.getOriginalFilename();
        // 生成随机的图片名
        String imgName = UUID.randomUUID() + "-" +fileName;
        if (!file.isEmpty()) {
            FileInputStream inputStream = null;
            try {
                inputStream = (FileInputStream) file.getInputStream();
                String path = qiNiuYunService.updatePhoto(imgName,inputStream);
                System.out.print("七牛云返回的图片链接:" + path);
                return path;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "上传失败";
        }
        return "上传失败";
    }
}

Swagger测试

响应体为

复制链接进入

文章参考:

https://www.cnblogs.com/code-duck/p/13406348.html

七牛云JAVASDK


相关文章
|
JavaScript Java
springboot和vue项目如何上传图片,结合若依框架实现
springboot和vue项目如何上传图片,结合若依框架实现
497 0
|
8月前
|
前端开发 Java 数据库
springboot上传图片到本地
springboot上传图片到本地
114 0
|
8月前
|
JavaScript 前端开发
解决editor.md+SpringBoot前后端分离上传图片到阿里云OOS跨域等问题
解决editor.md+SpringBoot前后端分离上传图片到阿里云OOS跨域等问题
92 0
|
SQL 开发框架 JavaScript
Springboot2.0 上传图片 jar包导出启动(第二章)
Springboot2.0 上传图片 jar包导出启动(第二章)
|
前端开发 安全 Java
【图床】SpringBoot上传图片
【图床】SpringBoot上传图片
264 1
|
Java Maven 对象存储
SpringBoot整合七牛云实现文件上传
七牛云文件上传 1、引入Maven依赖 <dependen
|
XML 缓存 开发框架
SpringBoot实践:上传图片文件时,报临时目录不存在
SpringBoot实践:上传图片文件时,报临时目录不存在
415 0
|
Java
SpringBoot项目中可以上传图片,但图片加载失败
最近有个Springboot项目的图片不显示
1246 0
|
Java Spring
spring boot 整合七牛云简单使用
spring boot 整合七牛云简单使用
619 0
spring boot 整合七牛云简单使用
|
Java
SpringBoot学习——七牛云上传删除图片
SpringBoot学习——七牛云上传删除图片
291 0