七牛云存储

七牛云(隶属于上海七牛信息技术有限公司)是国内领先的以视觉智能和数据智能为核心的企业级云计算服务商,同时也是国内知名智能视频云服务商,累计为 70 多万家企业提供服务,覆盖了国内80%网民。围绕富媒体场景推出了对象存储、融合 CDN 加速、容器云、大数据平台、深度学习平台等产品、并提供一站式智能视频云解决方案。为各行业及应用提供可持续发展的智能视频云生态,帮助企业快速上云,创造更广阔的商业价值。

官网

通过七牛云官网介绍我们可以知道其提供了多种服务,我们主要使用的是七牛云提供的对象存储服务来存储图片。

注册、登录

要使用七牛云的服务,首先需要注册成为会员。地址

注册完成后就可以使用刚刚注册的邮箱和密码登录到七牛云:

登录成功:

注意:登录成功后还需要进行实名认证才能进行相关操作。

新建存储空间

要进行图片存储,我们需要在七牛云管理控制台新建存储空间。点击管理控制台首页对象存储下的立即添加按钮,页面跳转到新建存储空间页面:

可以创建多个存储空间,各个存储空间是相互独立的。

查看存储空间信息

存储空间创建后,会在左侧的存储空间列表菜单中展示创建的存储空间名称,点击存储空间名称可以查看当前存储空间的相关信息


开发者中心

可以通过七牛云提供的开发者中心学习如何操作七牛云服务,地址

点击对象存储,跳转到对象存储开发页面,地址:https://developer.qiniu.com/kodo

七牛云提供了多种方式操作对象存储服务,本项目采用Java SDK方式,地址:https://developer.qiniu.com/kodo/sdk/1239/java

简介
此 SDK 适用于 Java 8 及以上版本。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云</lspan上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构服务或应用,通过七牛云及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。
Java SDK 属于七牛服务端SDK之一,主要有如下功能:

  1. 提供生成客户端上传所需的上传凭证的功能
  2. 提供文件从服务端直接上传七牛的功能
  3. 提供对七牛空间中文件进行管理的功能
  4. 提供对七牛空间中文件进行处理的功能
  5. 提供七牛融合CDN相关的刷新,预取,日志功能
  6. 提供七牛视频监控QVS设备管理、流管理等功能

使用Java SDK操作七牛云需要导入如下maven坐标:

             <!--七牛云--><dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.8.0</version></dependency>

鉴权

Java SDK的所有的功能,都需要合法的授权。授权凭证的签算需要七牛账号下的一对有效的Access Key和Secret Key,这对密钥可以在七牛云管理控制台的个人中心(https://portal.qiniu.com/user/key)获得,如下图:

Java SDK操作七牛云

我们就需要使用七牛云提供的Java SDK完成图片上传和删除,我们可以参考官方提供的例子。官网参考地址:https://developer.qiniu.com/kodo/1239/java#5

文件上传
最简单的就是上传本地文件,直接指定文件的完整路径即可上传。

//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.region0());
//...其他参数参考类注释UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
String accessKey = "your access key";
String secretKey = "your secret key";
String bucket = "your bucket name";
//如果是Windows情况下,格式是 D:\\qiniu\\test.png
String localFilePath = "/home/qiniu/test.png";
//默认不指定key的情况下,以文件内容的hash值作为文件名
String key = null;Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);try {Response response = uploadManager.put(localFilePath, key, upToken);//解析上传成功的结果DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);System.out.println(putRet.key);System.out.println(putRet.hash);
} catch (QiniuException ex) {Response r = ex.response;System.err.println(r.toString());try {System.err.println(r.bodyString());} catch (QiniuException ex2) {//ignore}
}

数据流上传
这里演示的是InputStream对象的上传,适用于所有的InputStream子类。这里的ByteInputStream只用于演示目的,实际用法根据情况而定。

//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.region0());
//...其他参数参考类注释UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
String accessKey = "your access key";
String secretKey = "your secret key";
String bucket = "your bucket name";//默认不指定key的情况下,以文件内容的hash值作为文件名
String key = null;try {byte[] uploadBytes = "hello qiniu cloud".getBytes("utf-8");ByteArrayInputStream byteInputStream=new ByteArrayInputStream(uploadBytes);Auth auth = Auth.create(accessKey, secretKey);String upToken = auth.uploadToken(bucket);try {Response response = uploadManager.put(byteInputStream,key,upToken,null, null);//解析上传成功的结果DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);System.out.println(putRet.key);System.out.println(putRet.hash);} catch (QiniuException ex) {Response r = ex.response;System.err.println(r.toString());try {System.err.println(r.bodyString());} catch (QiniuException ex2) {//ignore}}
} catch (UnsupportedEncodingException ex) {//ignore
}

封装工具类

为了方便操作七牛云存储服务,我们可以将官方提供的案例简单改造成一个工具类,在我们的项目中直接使用此工具类来操作就可以:

package com.zhubayi.common.utils;import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.google.gson.Gson;
import com.qiniu.storage.BucketManager;
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;/*** @author zhubayi* 七牛云工具类*/
public class QiniuUtils {public static final String accessKey = "your access key";public static final String secretKey = "your access secretKey ";public static final String bucket = "your bucket name";//上传文件public static void upload2Qiniu(String filePath,String fileName){//构造一个带指定Zone对象的配置类Configuration cfg = new Configuration(Region.huadong());UploadManager uploadManager = new UploadManager(cfg);Auth auth = Auth.create(accessKey, secretKey);String upToken = auth.uploadToken(bucket);try {Response response = uploadManager.put(filePath, fileName, upToken);//解析上传成功的结果DefaultPutRet putRet =new Gson().fromJson(response.bodyString(), DefaultPutRet.class);} catch (QiniuException ex) {Response r = ex.response;try {System.err.println(r.bodyString());} catch (QiniuException ex2) {//ignore}}}//上传文件public static void upload2Qiniu(byte[] bytes, String fileName){//构造一个带指定Zone对象的配置类Configuration cfg = new Configuration(Region.huadong());//...其他参数参考类注释UploadManager uploadManager = new UploadManager(cfg);//默认不指定key的情况下,以文件内容的hash值作为文件名String key = fileName;Auth auth = Auth.create(accessKey, secretKey);String upToken = auth.uploadToken(bucket);try {Response response = uploadManager.put(bytes, key, upToken);//解析上传成功的结果DefaultPutRet putRet =new Gson().fromJson(response.bodyString(), DefaultPutRet.class);System.out.println(putRet.key);System.out.println(putRet.hash);} catch (QiniuException ex) {Response r = ex.response;System.err.println(r.toString());try {System.err.println(r.bodyString());} catch (QiniuException ex2) {//ignore}}}//删除文件public static void deleteFileFromQiniu(String fileName){//构造一个带指定Zone对象的配置类Configuration cfg = new Configuration(Region.huadong());String key = fileName;Auth auth = Auth.create(accessKey, secretKey);BucketManager bucketManager = new BucketManager(auth, cfg);try {bucketManager.delete(bucket, key);} catch (QiniuException ex) {//如果遇到异常,说明删除失败System.err.println(ex.code());System.err.println(ex.response.toString());}}
}

controller

 //图片上传@PostMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)public Result upload(@RequestPart("imgFile") MultipartFile imgFile){try{//获取原始文件名String originalFilename = imgFile.getOriginalFilename();int lastIndexOf = originalFilename.lastIndexOf(".");//获取文件后缀String suffix = originalFilename.substring(lastIndexOf - 1);//使用UUID随机产生文件名称,防止同名文件覆盖String fileName = UUID.randomUUID().toString() + suffix;QiniuUtils.upload2Qiniu(imgFile.getBytes(),fileName);//图片上传成功Result result = new Result(true, MessageConstant.PIC_UPLOAD_SUCCESS);result.setData(fileName);return result;}catch (Exception e){e.printStackTrace();//图片上传失败return new Result(false,MessageConstant.PIC_UPLOAD_FAIL);}}

java整合七牛云上传文件相关推荐

  1. 七牛云上传文件之表单上传文件

    本人愚钝,七牛云上传文件的开发说明文档看了好久才搞懂,才能完成一个实例跑起来.现在做一下总结. 1.注册七牛,新建一个bucket,并获得ak,sk这个不用说了.不涉及到程序编码,重点讲一下编码的流程 ...

  2. uni-app 七牛云上传文件

    关注我的哔哩哔哩哦 https://space.bilibili.com/309103931 哔哩哔哩文章链接https://www.bilibili.com/read/cv5072498 七牛云上传 ...

  3. Java实现七牛云上传下载文件或图片

    文章目录 写在前面 一.准备工作 1.1.为什么选择七牛云? 1.2.七牛云注册 二.java操作七牛云对象存储下载 2.1.pom.xml引入依赖 2.2.上传下载具体代码 三.具体业务例子(七牛云 ...

  4. 使用七牛云上传文件报错error=incorrect region, please use up-z2.qiniu.com

    在上传图片到七牛云服务器上报错如下: info ===== <QNResponseInfo= id: CB441DB1-B50D-472A-8DAB-B07700E102C5, ver: 7.1 ...

  5. 使用七牛云上传文件报错incorrect region, please use up-z1.qiniup.com

    在上传图片到七牛云服务器上报错如下: 400: {"error":"incorrect region, please use up-z1.qiniup.com" ...

  6. PHP七牛云上传大视频文件异步存为m3u8格式(包括回调过程)

    问题引入 视频的第一帧加载缓慢. 简介 HTTP Live Streaming,缩写为HLS,是由苹果公司提出基于HTTP的流媒体网络传输协议.它的工作原理是把整个流分成一个个小的基于HTTP的文件来 ...

  7. java获取ajax上传的文件,Java使用Ajax异步上传文件

    相关代码示例: html代码片段: 名称 class="layui-input"> 描述 文件 请选择配置文件 立即提交 重置 js代码片段: //上传配置文件 $(&quo ...

  8. 七牛云上传截图后的base64位遇到的问题总结

    最近公司内部项目遇到上传base64位图片到七牛云,并且自定义key存储,在解决过程遇到很多问题,但是最终经过请教,都得到结果,故在这里总结一下... 官方文档 1,布局代码如下: <div c ...

  9. 七牛云上传资源和拉取

    一.七牛云存储介绍 七牛云存储,是非常流行的用户存储图片 视频 音频 等文件的存储方式,可以大大的降低用户请求对我们自己服务器的查询压力, 能有效的提高网页的打开速度,使用户获取更好的使用体验. 二. ...

最新文章

  1. mysql 超时异常_java.sql.SQLException:超出锁定等待超时;尝试在MYSQL中重启事务异常...
  2. ARM下的原子操作实现原理
  3. 11.使用ForwardAction实现页面屏蔽。
  4. html弹窗页面控制大小,使用JS弹出新窗口,并设置窗口的大小和位置等相关属性,传递参数...
  5. Go worker并发模式
  6. JDK8 lambda的会话指南–术语表
  7. signature=02d2eb69b4d24e2f9bb2956f66089339,Signature Balancing
  8. 数据3分钟丨Oracle Database 21c终于发布而22c可能直接跳过;2021 OceanBase数据库大赛开启。...
  9. 常见MIME类型例表
  10. 实验5 振幅调制(集成乘法器幅度调制电路)
  11. linux rpm和deb的区别,rpm与deb都是什么呢 有什么区别呢
  12. 房子要室内设计了,先从讲装修的施工工艺开始!
  13. Java Heap - Percolate Up, Percolate Down, and Heapify
  14. DTI在早期脑发育研究中的应用
  15. 大数据开发和大数据分析应该怎么选择?
  16. 人工智能+智能运维解决方案_如何建立对人工智能解决方案的信任
  17. vmware之设置共享文件夹
  18. 【题解 海量集训 并查集】 银河英雄传说
  19. Glove与Attention机制资料的整理
  20. 无线打印服务器华硕,华硕远程打印服务器

热门文章

  1. C++的三种继承方式详解
  2. 进程的三种状态以及转换
  3. springboot 1.5.x升级2.1.18 踩坑
  4. redis各个版本下载地址
  5. ISO 14229-1 $3E服务
  6. TD3:双延迟深度确定性策略梯度算法
  7. android 4.0的手机,买了别后悔 不能官升Android 4.0手机
  8. 《歌手》刘欢撒狗粮甜煞众人 许靖韵毕书尽踢馆结果揭晓
  9. 高斯混合算法(GMM)与最大期望算法(EM)的推导
  10. vue中echarts 实现下钻(饼图为例)