1. なぜ Qiniu Cloud の OSS (Object Storage Service) を使用するのですか?
2. Qiniu クラウドの使用:
- Qiniu Cloud公式サイトにログインし、登録・認証を行う(初回認証は30日間無料利用可能)
- 新しい収納スペースを作成する
作成したスペース名をクリックして、以下に要約されているスペースを入力します。
- ヘルプドキュメントを読み、 Web アプリケーションでQiniu Cloud Object Storage Service OSS を使用します
(アバターはQiniu Cloud Object Storage Service に保存されます)
3.1. 主に Java SDK を確認します (SDK は一連の jar パッケージであり、直接呼び出すことができます)
3.2. SDK (一連の jar パッケージ) が Maven メソッドとして導入され、SDK-jar パッケージの依存関係が独自の Web プロジェクトに導入されます 3.3. ファイルをアップロードするメソッド
:サーバー直接転送
3.4. データ フローのアップロード コードをコピーする
3.5. テスト クラスを使用してアップロード機能をテストする
コピーしたコードをテスト クラスにコピーし、対応するパッケージをインポートします (他の人のコードを使用し、他の人の Qiniu Cloud パッケージをインポートします)
3.6. 111.jpg という名前のローカル画像を Qiniu Cloud にアップロードする
AK、SK、およびバケットは機密に保つ必要があり、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 异常类型 改大一点
}
}
}
アプリケーション.xml
oss:
accessKey: 7R0PVHVZqQ_9ZUc65kwtYzjZhB5DhtMczhS6822g
secretKey: mTF-oazwPEHvO5FnQXFoWPRXKWjSmvC_55Ysycxb
bucket: pk-sg-blog
3.8. テストクラスを実行すると、画像が正常にアップロードされます
コードではキー値を設定していないので、
以下のキー値を設定します
3.9. 2022 ディレクトリを作成し、そのディレクトリに 111.png を置きたいと思います。