Java 文件上传七牛云

Java系列文章目录


文章目录

一、前言

  • 学习七牛云的使用

二、学习内容:

  • 七牛云使用步骤

三、问题描述

七牛云文档使用


四、解决方案:

4.1 新建空间

4.2 查找密钥

4.3 进入开发者中心查找JavaSDK文档

4.4 查找文件上传方法

其他使用方法类似

注意引入相关依赖

参考代码:

java 复制代码
//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.region0());
cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
//...其他参数参考类注释

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) {
    ex.printStackTrace();
    if (ex.response != null) {
        System.err.println(ex.response);

        try {
            String body = ex.response.toString();
            System.err.println(body);
        } catch (Exception ignored) {
        }
    }
}

4.5 运行测试

  • 输入地址localhost:8080/doc.html打开文档
  • 运行后上传测试如果成功进入空间即可查看

使用knif4j测试


五、总结:

5.1 学习总结:

  • 有很多传递方法

第一种方法:

java 复制代码
    //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.region0());
        cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
//...其他参数参考类注释

        UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
        String accessKey = "";
        String secretKey = "";
        String bucket = "";// 设置上传的存储区域

//默认不指定key的情况下,以文件内容的hash值作为文件名
        String key = null;

        LocalDate now = LocalDate.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        String format = now.format(formatter);

        String originalFilename = file.getOriginalFilename();
        String extend = originalFilename.substring(originalFilename.lastIndexOf("."));
        String fileName = format+ UUID.randomUUID().toString().replace("-","") +extend;


        try {
            InputStream inputStream = file.getInputStream();
            Auth auth = Auth.create(accessKey, secretKey);
            String upToken = auth.uploadToken(bucket);


            try {
                Response response = uploadManager.put(inputStream, fileName, upToken,null,null);
                //解析上传成功的结果
                DefaultPutRet putRet = JSON.parseObject(response.bodyString(),DefaultPutRet.class);
                System.out.println("http://scw897cq.hd-bkt.clouddn.com/"+putRet.key);
				//如果putRet.key的值是example.jpg,那么输出的URL将是http://scw897cq.hd-bkt.clouddn.com/example.jpg。你可以通过这个URL在浏览器或其他客户端直接访问或下载这个文件。

                System.out.println(putRet.hash);
            } catch (QiniuException ex) {
                ex.printStackTrace();
                if (ex.response != null) {
                    System.err.println(ex.response);

                    try {
                        String body = ex.response.toString();
                        System.err.println(body);
                    } catch (Exception ignored) {
                    }
                }
            }
        } catch (UnsupportedEncodingException ex) {
            //ignore
        }



        return "success";
    }

文档中的方法:

java 复制代码
//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.region0());
cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
//...其他参数参考类注释

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) {
    ex.printStackTrace();
    if (ex.response != null) {
        System.err.println(ex.response);

        try {
            String body = ex.response.toString();
            System.err.println(body);
        } catch (Exception ignored) {
        }
    }
}

区别如下:

文件来源:

  • 第一段代码使用MultipartFile接口从HTTP请求中获取文件,这通常是在Web应用中接收前端上传的文件的方式。
  • 第二段代码直接使用本地文件路径localFilePath来指定要上传的文件,这种方式适用于上传本地文件系统中的文件。

文件处理方式:

  • 第一段代码中,文件被转换为InputStream,并通过file.getInputStream()获取输入流。
  • 第二段代码中,直接使用文件路径localFilePath来上传文件。

JSON 解析库:

  • 第一段代码使用com.alibaba.fastjson2.JSON来解析响应体。
  • 第二段代码使用com.google.gson.Gson来解析响应体。

文件名生成:

  • 第一段代码根据当前日期和随机UUID生成文件名,并保留原始文件扩展名。
  • 第二段代码没有显示文件名生成逻辑,而是使用默认行为,即如果未指定key则使用文件内容的哈希值作为文件名。

注意引入依赖

参考依赖:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.qiniu</groupId>
        <artifactId>qiniu-java-sdk</artifactId>
        <version>[7.13.0, 7.13.99]</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -->
    <dependency>
        <groupId>com.alibaba.fastjson2</groupId>
        <artifactId>fastjson2</artifactId>
        <version>2.0.49</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.9</version>
    </dependency>
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
        <version>4.4.0</version>
    </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>
</dependencies>

声明:如本内容中存在错误或不准确之处,欢迎指正。转载时请注明原作者信息(麻辣香蝈蝈)。

相关推荐
乐悠小码1 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
史努比.3 分钟前
Pod控制器
java·开发语言
2的n次方_6 分钟前
二维费用背包问题
java·算法·动态规划
皮皮林5516 分钟前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
莳光.6 分钟前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis
程序猿麦小七11 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
敲敲敲-敲代码12 分钟前
游戏设计:推箱子【easyx图形界面/c语言】
c语言·开发语言·游戏
weisian15118 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全
蓝田~19 分钟前
SpringBoot-自定义注解,拦截器
java·spring boot·后端
ROC_bird..21 分钟前
STL - vector的使用和模拟实现
开发语言·c++