文件上传——七牛云

2023-10-30

七牛云简介

七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化PaaS服务。围绕富媒体场景,七牛先后推出了对象存储,融合CDN加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

七牛云对象存储 Kodo 是七牛云提供的高可靠、强安全、低成本、可扩展的存储服务。您可通过控制台、API、SDK 等方式简单快速地接入七牛存储服务,实现海量数据的存储和管理。通过 Kodo 可以进行文件的上传、下载和管理。

总的来说:七牛云是为开发服务的云存储环境,可以在七牛云上托管静态文件资源,并且进行下载,还有很多七牛云的sdk。
具体有关七牛云的介绍可以参考开发文档:https://developer.qiniu.com/kodo

七牛云使用前

  1. 首先先去七牛云官方注册一个账号——>七牛云官方,注册完毕之后,点击个人中心
    在这里插入图片描述

  2. 然后进行身份认证,按照步骤进行认证(1-2天认证完成)

  3. 当身份认证完成之后,再点击对象存储,然后新建存储空间
    在这里插入图片描述
    在这里插入图片描述

  4. 然后会进入一个界面,让你输入空间名称还有存储区域,以及访问控制,按照要求填写即可
    在这里插入图片描述

  5. 创建好空间之后就可以对空间进行管理,也可以绑定域名
    在这里插入图片描述
    如果需要使用七牛云进行api接口开发,就必须要进行备案域名的绑定,且要对域名进行按要求解析
    (刚注册的时候好像有免费的测试使用域名,但是我有自己的域名就没有使用测试域名)

  6. 域名绑定与解析
    点击空间管理,进入域名管理,即可以添加绑定域名。
    在这里插入图片描述
    进入添加域名的界面后,按要求填写相关信息即可(域名一定要是备案域名)
    在这里插入图片描述
    绑定了域名之后,会有一个审核时间(差不多5-10分钟),之后就可以对域名进行解析。
    在这里插入图片描述
    接下来参考官方文档的解析过程:如何配置域名的 CNAME
    我使用的域名是泛子域名,用的是腾讯云的域名:
    在这里插入图片描述
    根据文档对在七牛云上绑定了的域名做对应的记录值解析即可。

  7. 完成以上的操作就可以使用七牛云sdk进行开发了。

使用七牛云SDK开发

主要使用的java的sdk,也可以根据自己的需求参考官方文档:https://developer.qiniu.com/kodo

开发步骤

  1. 导入SDK坐标
<!--七牛云-->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>7.2.7</version>
        </dependency>

        <!--工具包-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17-beta1</version>
        </dependency>
  1. 编写配置信息(application.properties)
qiniu.ACCESS_KEY=七牛云AK
qiniu.SECRET_KEY=七牛云SK
qiniu.bucketname=七牛云创建空间的名称
qiniu.QINIU_IMAGE_DOMAIN=七牛云绑定的域名

七牛云的配置信息都可以在个人中心拿到,其中AK和SK:点击密钥管理
在这里插入图片描述
在这里插入图片描述

  1. 编写七牛云相关的配置文件(QiNiuConfig.java)
package cn.kt.qinu_demo.config;

import com.qiniu.common.Zone;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author tao
 * @date 2021-03-28 1:25
 * 概要:
 */

@Data
@Component
//从配置文件里获取
@ConfigurationProperties(prefix = "qiniu")
public class QiNiuConfig {

    // 设置好账号的ACCESS_KEY
    private String ACCESS_KEY;

    // 设置好账号的SECRET_KEY
    private String SECRET_KEY;

    // 设置七牛要上传的空间
    private String bucketname;

    // 设置关联七牛的域名
    private String QINIU_IMAGE_DOMAIN;

    // 密钥配置
    public Auth getAuth() {
        // 构造一个带指定Zone对象的配置类,不同的七云牛存储区域调用不同的zone
        Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
        return auth;
    }

    /* 构造一个带指定Zone对象的配置类,不同的七云牛存储区域调用不同的zone
        华东:zone0
        华北:zone1
        华南:zone2
        北美:zoneNa0
     */
    public Configuration getConfiguration() {
        Configuration cfg = new Configuration(Zone.zone2());
        return cfg;
    }

    // 构造一个七牛manager
    public UploadManager getUploadManager() {
        UploadManager uploadManager = new UploadManager(getConfiguration());
        return uploadManager;
    }

    // 构造一个七牛manager
    public BucketManager getBucketManager() {
        BucketManager bucketManager = new BucketManager(getAuth(), getConfiguration());
        return bucketManager;
    }

    // 简单上传,使用默认策略
    // ,只需要设置上传的空间名就可以了
    public String getUpToken() {
        return getAuth().uploadToken(getBucketname());
    }
}
  1. 编写操作七牛的工具类(QiNiuUtil.java)
package cn.kt.qinu_demo.utils;

import cn.kt.qinu_demo.config.QiNiuConfig;
import com.alibaba.fastjson.JSONObject;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.PostConstruct;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * @author tao
 * @date 2021-03-27 17:19
 * 概要:操作七牛云的工具类
 */
@Component
@Slf4j
public class QiNiuUtil {

    @Autowired
    private QiNiuConfig config;

    private static QiNiuConfig qiNiuConfig;

    //初始化静态参数
    //通过@PostConstruct实现初始化bean之前进行的操作
    @PostConstruct
    public void init() {
        qiNiuConfig = config;
    }

    //储存图片文件
    public static String saveFile(MultipartFile file, String fileName) throws IOException {
        try {
            // 调用put方法上传
            Response res = qiNiuConfig.getUploadManager().put(file.getBytes(), fileName, qiNiuConfig.getUpToken());
            // 打印返回的信息
            if (res.isOK() && res.isJson()) {
                // 返回这张存储照片的地址
                return qiNiuConfig.getQINIU_IMAGE_DOMAIN() + JSONObject.parseObject(res.bodyString()).get("key");

            } else {
                log.error("七牛异常:" + res.bodyString());
                return null;
            }
        } catch (QiniuException e) {
            // 请求失败时打印的异常的信息
            log.error("七牛异常:" + e.getMessage());
            return null;
        }
    }

    //储存图片文件
    public static String deleteFile(String fileName) throws IOException {
        BucketManager bucketManager = qiNiuConfig.getBucketManager();
        try {
            //七牛云删除
            bucketManager.delete(qiNiuConfig.getBucketname(), fileName);
            //数据库删除


            return "success";
        } catch (QiniuException ex) {
            //数据库删除

            return "failed";
        }
    }

    //获取UUID+Date的文件名
    public static String getUUIDFileNameNow(String fileName) {
        int dotPos = fileName.lastIndexOf(".");
        if (dotPos < 0) {
            return null;
        }//获取文件后缀
        String fileExt = fileName.substring(dotPos + 1).toLowerCase();
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmssS");
        String nowStr = "-" + format.format(date);
        String result = UUID.randomUUID().toString().replaceAll("-", "") + nowStr + "." + fileExt;
        return result;
    }
}
  1. 编写操作文件的工具类
    相关代码和介绍参考我上一篇博客:
    个人博客网站:http://qkongtao.cn/?p=560
    CSDN:https://blog.csdn.net/qq_42038623/article/details/114823328?spm=1001.2014.3001.5501

  2. 编写Controller层(QiNiuController.java)
    主要写了两个接口方法:

  • 文件上传,返回文件src路径
  • 删除文件:根据文件名删除存储在七牛云上的文件
    在代码中可以自己添加Service层和Dao层,对文件信息进行数据库持久层存储
    代码如下:
package cn.kt.qinu_demo.controller;

import cn.kt.qinu_demo.utils.FileUtil;
import cn.kt.qinu_demo.utils.QiNiuUtil;
import org.junit.platform.commons.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * @author tao
 * @date 2021-03-27 17:52
 * 概要:
 */
@Controller
public class QiNiuController {

    //文件上传
    @RequestMapping(value = "/testUpload", method = RequestMethod.POST)
    @ResponseBody
    public String upload(@RequestParam("file") MultipartFile file) throws IOException {

        //判断文件是否为空
        if (file.isEmpty()) {
            return "error";
        }

        //获取文件后缀
        String suffix = FileUtil.getExtensionName(file.getOriginalFilename());
        //获取文件类型
        String type = FileUtil.getFileType(suffix);
        //获取文件大小
        FileUtil.getSize(file.getSize());
        //获取UUID+date文件名
        String fileName = QiNiuUtil.getUUIDFileNameNow(file.getOriginalFilename());
        //获取文件上传七牛云后的url
        String fileUrl = QiNiuUtil.saveFile(file, fileName);


        /**************************** 在这可以将数据信息进行数据库存储 **************************/
        return "src:" + fileUrl;
    }

    //文件删除
    @RequestMapping(value = "/testDelete", method = RequestMethod.DELETE)
    @ResponseBody
    public String delete(@RequestParam("fileName") String fileName) throws IOException {
        String res = QiNiuUtil.deleteFile(fileName);
        return res;
    }

}

开发接口测试

  1. 上传图片测试
  • Postman测试
    在这里插入图片描述

  • 七牛云上的文件管理
    在这里插入图片描述

  1. 删除文件测试
  • Postman测试
    在这里插入图片描述
  • 七牛云上的文件管理
    在这里插入图片描述
  1. 当然上传视频也是可以的
    在这里插入图片描述

源码下载

七牛云上传的项目源码见下一篇博客:图片上传api——chevereto个人图床搭建

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件上传——七牛云 的相关文章

随机推荐

  • 剑指offer—40.最小的K个数—分析及代码(Java)

    剑指offer 40 最小的K个数 分析及代码 Java 一 题目 二 分析及代码 1 排序 1 思路 2 代码 3 结果 2 Partition 1 思路 2 代码 3 结果 3 堆 1 思路 2 代码 3 结果 三 其他 一 题目 输入
  • vue3中的ref,toRef,toRefs三个是干嘛的,有什么作用呢。

    1 ref的使用 ref 接受一个原始值 返回一个具有响应式的对象 对象有一个value属性 其值就是所传递的原始值 ref是做的一个拷贝关系 修改对象msg的值 不会影响对象obj 视图会发生变化 import ref from vue
  • 蓝桥杯单片机组经验分享之(三)各模块用法(3)继电器、蜂鸣器

    继电器和 有源 蜂鸣器用法类似LED 挂载在锁存器U9上 因为继电器和蜂鸣器需要提供较大的驱动电流 锁存器驱动能力不够 因此锁存器后加入了ULN2003提高带负载能力 驱动电流型设备 连接如下图 继电器 蜂鸣器分别接于QUT5 OUT7 锁
  • wps图表横纵坐标怎么设置_wps怎么切换横纵坐标/excel图表怎么切换横纵坐标

    怎样将excel中图表的横纵坐标互换 数据那边有个切换行列 怎么在excel把横纵坐标互换 你是指用excel制作的图标吗 你把数据先进行转置就好了 EXCEL图表中 如何将横坐标和纵坐标更换一下 右键点选图表数据区域 选择数据 看到切换行
  • 解决电信劫持的快速办法!

    DNS被劫持后的表现 打开一个正常的网站 电脑的右下角回莫名其妙的弹出一些小广告 打开一个下载链接 并不是自己所需要的东西 浏览器输入一个网址后回车网页跳转到其他网址的页面 iis7网站监控 测DNS污染检测 网站打开速度检测 网站是否被黑
  • windows下多个python版本共存

    不想使用virtualenv来管理多个python版本的 可以通过修改python exe的名字 然后加入环境变量 运行时通过名字区分即可 参考链接 https www cnblogs com pxuan p 6408823 html
  • 什么是Spring IOC 容器?

    Spring IOC 负责创建对象 管理对象 通过依赖注入 DI 装配对象 配置对象 并且管理这些对象的整个生命周期
  • 根据权重随机选取指定条数记录的简单算法实现(C#)【含源代码】

    原文地址 http www cnblogs com foolin archive 2012 03 22 2412632 html 一 应用场景 有时我们需要从一些列数据中根据权重随机选取指定条数记录出来 这里需要权重 随机 我们根据权重越大
  • 用ACM LaTeX最新模板(acmart)时遇到的作者单位和地址无法合并的问题

    这个问题只是简单记录一下 目前并没有太好的解决方案 这几天在准备一篇论文的Camera Ready版本 发现这个问题很让人苦恼 以前我们用ACM的LaTeX模板 如果多个作者属于一个单位 可以用 sharedaffiliation这种方式
  • 日常健康管理

    0分贝0dB是人们刚刚能听到的最微弱的声音听觉下限 30dB40dB是较为理想的安静睡眠环境 超过50dB会影响睡眠和休息70dB会干扰谈话 影响工作效率长期生活在90分贝以上的噪声环境 会严重影响听力和引起神经衰弱 头疼 血压升高等疾如果
  • 怎么看空调定时成功_空调定时怎么设置

    空调是我们常用的电器 尤其是在炎热的夏季空调是我们必须使用的家电 夜晚的时候一直开着空调很容易着凉 这个时候我们可以开启空调的定时键 今天想跟大家说一说空调定时怎么设置 希望可以给大家带来帮助 一 空调定时怎么设置 1 首先我们先打开空调
  • CSV文件中的逗号、双引号的转义。读写带特殊字符的csv文件。

    如果字段中有逗号 该字段使用双引号 括起来 如果该字段中有双引号 该双引号前要再加一个双引号 然后把该字段使用双引号括起来 字段处理前 字段处理后 abc d2 abc d2 ab c d2 ab c d2 abc abc 参考文章 htt
  • STM32F103ZET6【HAL函开发】STM32CUBEMX------2.GPIO输入、按键外部中断

    一 硬件介绍 正点原子战舰开发板 主控芯片STM32F103ZET6 两个LED接到PB5 PE5 三个按键PE2 PE3 PE4接GND 一个按键PA0接VCC3 3 二 STM32CUBEMX基础配置 2 1 晶振配置 如果你的板子上外
  • DC-DC模块输入端电容对12V电源纹波的影响

    1 目标 说明DC DC模块输入端极性电容对供电源纹波的影响 强调DC DC输入端极性滤波电容的重要性 2 DC DC模块介绍 DC DC模块的输入电源大小为12V 核心芯片为MP24943 输出电源大小为5V 电路原理图如下 输入端不添加
  • Java千百问_04异常处理(007)_常见的java异常有哪些(非运行时)

    1 常见的java运行时异常有哪些 了解非运行时异常看这里 什么是java中的异常 常见的运行时异常看这里 常见的运行时异常有哪些 我们所说的常见异常是jdk或者其他常用第三方jar中的异常 出现频次很高的异常 常见的非运行时异常 即检查异
  • 2019 校招多益网络软件开发java 笔试题

    刚做完 真的又凉了 编程题没写出来 心累了 而且问答题好多其实都是之前看过的 可是只有模糊的印象 则真的好气呀 也算给自己敲了警钟吧 要用心记 用心总结 多益的笔试题型挺多的 难度算还好的 毕竟只有一道编程题 奈何我没写出来 题型 选择题
  • 15b万用表怎么测电容_万用表怎么用?福禄克15B+一机详解万用表的使用方法

    随着大众消费等级和安全意识的不断提升 在不断加购电器的同时 人们愈发重视电路安全 万用表渐渐从电工行业专用仪器成为了家庭标配工具之一 然而 很多人把万用表买回家之后 却对着表盘上密密麻麻的符号一筹莫展 最后只能放在角落里落满灰尘 那么 万用
  • Mysql索引

    创建索引 索引能提高查询速率 1 最常见的是主键 默认加了索引 2 普通创建索引方法 create index 名字 on 表名 列名 3 联合索引 create index 索引名 on 表名 列名 列名 列名 4 复合索引查询的时候遵守
  • 二分的经典问题 最大化最小值和最小化最大值

    有点长 可以选自己想看的部分看 不过建议把刚开始的介绍看完 不多说 先来一个在升序无重复元素的数组中二分搜索的板子 l r 2 mid可能会爆int这种细节问题我们就放一边 int a MAX int Binary Search int v
  • 文件上传——七牛云

    目录 七牛云简介 七牛云使用前 使用七牛云SDK开发 开发步骤 开发接口测试 源码下载 七牛云简介 七牛云是国内领先的企业级公有云服务商 致力于打造以数据为核心的场景化PaaS服务 围绕富媒体场景 七牛先后推出了对象存储 融合CDN加速 数