主要写如何将,图片上传到七牛云存储,使用springboot,写一个接口
Java SDK_SDK 下载_对象存储 - 七牛开发者中心 (qiniu.com)
maven依赖
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.10</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.fsl</groupId>
<artifactId>loveNest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>loveNest</name>
<description>loveNest</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.qiniu/qiniu-java-sdk -->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.11.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>工具类



java
package com.fsl.Utils;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.qiniu.util.Base64;
import com.qiniu.util.StringMap;
import com.qiniu.util.UrlSafeBase64;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
public class QiniuCloudUtil {
// 设置需要操作的账号的AK和SK
private static final String ACCESS_KEY = "OdkfJe-mtg9s4yqgeP8SecgLlh3W44MRbeZZFYmU";
private static final String SECRET_KEY = "0eEhN6I__Cax2c1emt5HiBdO8mzStjy_YRxKqsLO";
// 要上传的空间,就是创建时给的名字
private static final String bucketname = "love-nest";
// 密钥
private static final Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
//七牛云域名,没有绑定的话,使用七牛云给的
private static final String DOMAIN = "http://rsld9zhyg.bkt.clouddn.com/";
public String getUpToken() {
return auth.uploadToken(bucketname, null, 3600, new StringMap().put("insertOnly", 1));
}
// 普通上传
public String upload(String filePath, String fileName) throws IOException {
// 创建配置文件,指定bucket的区域
Configuration cfg = new Configuration(Region.autoRegion());
cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;
// 创建上传对象
UploadManager uploadManager = new UploadManager(cfg);
try {
// 调用put方法上传
String token = auth.uploadToken(bucketname);
if (StringUtils.isEmpty(token)) {
System.out.println("未获取到token,请重试!");
return null;
}
// 上传到bucket时,文件的名字,不填默认为原文件名
// 这里返回的是{"hash":"xxxxx","key":"xxxxx"}
// hash为图片的hash值,key为文件名
Response res = uploadManager.put(filePath, fileName, token);
// 打印返回的信息
System.out.println(res.bodyString());
if (res.isOK()) {
Ret ret = res.jsonToObject(Ret.class);
//如果不需要对图片进行样式处理,则使用以下方式即可
return DOMAIN + ret.key;
// return DOMAIN + ret.key + "?" + style;
}
} catch (QiniuException e) {
Response r = e.response;
// 请求失败时打印的异常的信息
System.out.println(r.toString());
try {
// 响应的文本信息
System.out.println(r.bodyString());
} catch (QiniuException e1) {
// ignore
}
}
return null;
}
//base64方式上传
public String put64image(byte[] base64, String key) throws Exception {
String file64 = Base64.encodeToString(base64, 0);
Integer l = base64.length;
String url = "http://upload.qiniu.com/putb64/" + l + "/key/" + UrlSafeBase64.encodeToString(key);
//非华东空间需要根据注意事项 1 修改上传域名
RequestBody rb = RequestBody.create(null, file64);
Request request = new Request.Builder().
url(url).
addHeader("Content-Type", "application/octet-stream")
.addHeader("Authorization", "UpToken " + getUpToken())
.post(rb).build();
//System.out.println(request.headers());
OkHttpClient client = new OkHttpClient();
okhttp3.Response response = client.newCall(request).execute();
System.out.println(response);
//如果不需要添加图片样式,使用以下方式
return DOMAIN + key;
// return DOMAIN + key + "?" + style;
}
// // 普通删除(暂未使用以下方法,未测试)
// public void delete(String key) throws IOException {
// // 实例化一个BucketManager对象
// BucketManager bucketManager = new BucketManager(auth);
// // 此处的25是去掉:https://download.pnki.cn/,剩下的key就是图片在七牛云的名称
// key = key.substring(25);
// try {
// // 调用delete方法移动文件
// bucketManager.delete(bucketname, key);
// } catch (QiniuException e) {
// // 捕获异常信息
// Response r = e.response;
// System.out.println(r.toString());
// }
// }
static class Ret {
public long fsize;
public String key;
public String hash;
public int width;
public int height;
}
}测试
java
package com.fsl;
import com.fsl.Utils.QiniuCloudUtil;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import com.fsl.Utils.QiniuCloudUtil.*;
import java.io.IOException;
@SpringBootTest
class LoveNestApplicationTests {
@Test
void contextLoads() {
}
@Test
void testUploadPicture() throws IOException {
QiniuCloudUtil q =new QiniuCloudUtil();
// 这里填的null,上传的文件名为hash值
q.upload("E:\\壁纸\\test-qiniu.jpg",null);
}
}