一、为什么要使用七牛云的OSS(对象存储服务)?
二、七牛云使用:
- 登录七牛云官网,注册并认证 (初次认证有30天免费使用权限)
- 新建存储空间
点击创建的空间名字,进入 空间概括如下:
- 阅读帮助文档,在自己的web应用中 使用七牛云对象存储服务OSS
(头像 存至 七牛云对象存储服务中)
3.1、主要看 java SDK (SDK就是一系列的jar包,用的时候直接调用jar包中的api即可)
3.2、SDK(一系列jar包) 引入方式 选择maven方式, 将SDK——jar包 依赖引入 自己的web项目中即可
3.3、上传文件方式: 服务器直传
3.4、复制 数据流上传代码
3.5、用一个测试类 测试上传功能
将拷贝的代码复制到 测试类中,导入相应的包(用人家的代码,导入人家七牛云的包)
3.6、上传本机一张名为111.jpg的图片到七牛云上
AK,SK,bucket要保密,不能直接在 OSSTest类中写。为了安全要从配置文件汇总读取到他们的值
3.7、OSSTest(主要修改6个地方 + 读取application.xml配置文件)
package com.sangeng;
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 lombok.Data;
import org.junit.jupiter.api.Test;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
@Component //注解将该类标记为Spring的组件
//测试类所在包名 test 和 启动类所在包名java 一致(都在同一包src下),不需要加配置。如果不一致要加配置(加属性)
//@SpringBootTest(classes = SanGengBlogApplication.class)//指定启动类的字节码
@SpringBootTest
//@ConfigurationProperties 的作用: 让JavaBean中属性值要和配置文件application.xml进行映射
@ConfigurationProperties(prefix = "oss") //从application.xml 配置文件中读取 内容
public class OSSTest {
// 读取的时候,要创建成员变量(变量名要和application.xml文件中的名字一致)
// 并且 成员变量必须创建setter方法,进行自动赋值 (自动读取配置文件赋值)
private String accessKey;
private String secretKey;
private String bucket;
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public void setBucket(String bucket) {
this.bucket = bucket;
}
@Test
public void testOss(){
// 注:用七牛云的oss,所以导包的时候 要导入七牛云的包。 用人家的代码,导人家的包 com.qiniu.storage
//构造一个带指定 Region 对象的配置类
//修改1.Region指定数据存储区域,autoRegion()自动根据七牛云账号找到选的区域(我选的是 华北)
Configuration cfg = new Configuration(Region.autoRegion());
cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
注:为了安全起见,AK,SK,bucket存储空间名,都是从application.xml 配置文件中读取到的
修改2.复制七牛云官网-个人中心-密钥管理- AK和SK
// String accessKey = "";
// String secretKey = "";
修改3.创建存储空间的名字 pk-sg-blog
// String bucket = "";
//默认不指定key的情况下,以文件内容的hash值作为文件名, 比如上传一张图片,名字问hash值生成的名字
//修改4.指定上传文件到oss时,文件的存储名
String key = null;
try {
//修改5 注释掉,默认上传 字符串,写我们自己的上传格式(上传图片)
// byte[] uploadBytes = "hello qiniu cloud".getBytes("utf-8");
// ByteArrayInputStream byteInputStream=new ByteArrayInputStream(uploadBytes);
//上传文件——图片格式(本机绝对路径)
InputStream inputStream = new FileInputStream("C:\\Users\\yangguang\\Desktop\\111.jpg");
Auth auth = Auth.create(accessKey, secretKey);//创建凭证
String upToken = auth.uploadToken(bucket); //上传凭证
try {
//修改6 put方法 第一个参数 要放上面 自己定义的 inputStream对象
Response response = uploadManager.put(inputStream,key,upToken,null, null);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key); //Fo2AVLRHugoNbek6XZ8Uy-DCnuSL
System.out.println(putRet.hash); //Fo2AVLRHugoNbek6XZ8Uy-DCnuSL hash值就是上传后的图片名字
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
} catch (Exception ex) {
//ignore 异常类型 改大一点
}
}
}
application.xml
oss:
accessKey: 7R0PVHVZqQ_9ZUc65kwtYzjZhB5DhtMczhS6822g
secretKey: mTF-oazwPEHvO5FnQXFoWPRXKWjSmvC_55Ysycxb
bucket: pk-sg-blog
3.8、运行测试类,图片上传成功
因为代码没有设置key值
下面设置key值
3.9、想创建一个2022目录,目录下放111.png