Skip to content

主要写如何将,图片上传到七牛云存储,使用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>

工具类

image-20230404220549482

image-20230404220623766

image-20230404220652754

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);
    }

}