SpringBoot学习——七牛云上传删除图片

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: SpringBoot学习——七牛云上传删除图片

导入依赖

        <!-- 七牛云 -->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>[7.5.0, 7.5.99]</version>
        </dependency>
        <!--Gosn依赖-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>

application.yml 配置

# 七牛云
oss:
  qiniu:
    domain: 填入你的访问域名 # 访问域名(默认使用七牛云测试域名)
    accessKey: 填入你的公钥 # 公钥
    secretKey: 填入你的私钥 # 私钥
    bucketName: 填入你的存储空间名  #存储空间名称

QiNiuYunConfig.java

@Configuration
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;
    protected static Logger logger = LoggerFactory.getLogger(QiNiuYunConfig.class);
    public String uploadPhoto(String filename, FileInputStream file) {
        // 构造一个带指定Region对象的配置类,注意后面的Region个地区不一样的
        Configuration cfg = new Configuration(Region.region2());
        cfg.useHttpsDomains = false;
        UploadManager uploadManager = new UploadManager(cfg);
        // 生成上传凭证,然后准备上传
        Auth auth = Auth.create(qiniuAccessKey, qiniuSecretKey);
        String upToken = auth.uploadToken(qiniuBucketName);
        try {
            Response response = uploadManager.put(file, filename, upToken, null, null);
            // 解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            // 这个returnPath是获得到的外链地址,通过这个地址可以直接打开图片
            return "http://"+qiniuDomain+"/"+putRet.key;
        } catch (QiniuException ex) {
            Response r = ex.response;
            logger.error(r.toString());
            System.err.println();
            try {
                logger.error(r.bodyString());
            } catch (QiniuException ex2) {
                r = ex2.response;
                logger.error(r.toString());
            }
        }
        return "";
    }
    public boolean deletePhoto(String fileName) {
        Configuration configuration = new Configuration(Region.region2());
        Auth auth = Auth.create(qiniuAccessKey, qiniuSecretKey);
        BucketManager bucketManager = new BucketManager(auth, configuration);
        try {
            if (fileName != null) {
                bucketManager.delete(qiniuBucketName, fileName);
                return true;
            }
        } catch (QiniuException ex) {
            //如果遇到异常,说明删除失败
            logger.error(String.valueOf(ex.code()));
            logger.error(ex.response.toString());
        }
        return false;
    }
}

使用案例:

七牛云返回的路径格式:

 http:// 访问域名 / 图片名称

注:

 这里的RespBean是自定义的响应类

    @Autowired
    protected static final Logger logger = LoggerFactory.getLogger(QrCodeController.class);
    private QiNiuYunConfig qiNiuYunConfig;
    @Autowired
    private IQrCodeService iQrCodeService;
  @PostMapping("qrCode/insert")
    @ApiOperation("上传二维码图片")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "photoName", value = "图片名称", dataTypeClass = String.class)
    })
    public RespBean insert(@RequestParam String photoName, @RequestPart("file") MultipartFile file) {
        QrCode qrCode = new QrCode();
        qrCode.setPhotoName(photoName);
        // 获取文件名
        //String fileName = file.getOriginalFilename();
        // 生成随机的图片名 (这个案例中没使用)
        //String photoName = UUID.randomUUID() + "-" +fileName;
        if (!file.isEmpty()) {
            try {
                FileInputStream inputStream = (FileInputStream) file.getInputStream();
                // 这里接收 七牛云返回的 图片地址
                String path = iQiNiuYunService.uploadPhoto(photoName, inputStream);
                qrCode.setPhotoAddress(path);
                // 将二维码实体qrcode 插入到mysql数据库中
                if (iQrCodeService.insert(qrCode)) {
                    logger.info("上传成功!");
                    return RespBean.ok("上传成功!");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return RespBean.error("上传失败!");
    }
    @DeleteMapping("qrCode/delete")
    @ApiOperation("根据照片名删除图片")
    @ApiImplicitParam(name = "photoName", value = "图片名称",dataTypeClass = String.class)
    public RespBean delete(@RequestParam String photoName){
        if (iQiNiuYunService.deletePhoto(photoName)&&iQrCodeService.delete(photoName)){
            return RespBean.ok("删除成功");
        }
        return RespBean.ok("删除失败,未找到该图片!");
    }

相关说明:

关于 Region 对象和机房的关系如下:

机房    Region

华东    Region.region0() , Region.huadong()

华北    Region.region1() , Region.huabei()

华南    Region.region2() , Region.huanan()

北美    Region.regionNa0() , Region.beimei()

相关文章
|
10天前
|
JSON 前端开发 JavaScript
SpringBoot 2.0 多图片上传加回显
本文记录了在SpringBoot 2.0中实现商户注册后台功能时,处理多图片上传及回显的过程。通过使用`MultipartFile[]`接收前端传来的图片文件,并确保前后端参数名一致。展示了Controller、前端HTML和JS代码,以及配置文件中对上传图片大小的设置。还介绍了全局异常处理机制,使用`@ControllerAdvice`注解捕获异常。最后总结了一些常见问题及解决方法。
SpringBoot 2.0 多图片上传加回显
|
3月前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
96 9
|
4月前
|
前端开发 Java 数据库
SpringBoot学习
【10月更文挑战第7天】Spring学习
51 9
|
3月前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
46 0
|
4月前
|
XML Java 数据格式
Spring学习
【10月更文挑战第6天】Spring学习
36 1
|
4月前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
156 2
|
4月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
490 1
|
4月前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
56 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
4月前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
63 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
4月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
672 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库