Java实现七牛云文件图片上传下载

下面是Java实现七牛云文件图片上传下载的完整攻略:

什么是七牛云

七牛云是一个云存储服务提供商,用户可以基于七牛云提供的 API 或者 SDK 进行文件上传、下载、管理、转码等操作。在开发过程中,我们可以直接调用七牛云提供的 API 或者使用已有的 SDK 完成操作。

Java 实现七牛云文件图片上传下载

  1. 引入七牛云的 SDK

首先需要引入七牛云的 SDK,根据使用情况选择合适的 SDK 版本,在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.qiniu</groupId>
    <artifactId>qiniu-java-sdk</artifactId>
    <version>[7.4.1, 7.5.0]</version>
</dependency>
  1. 初始化配置信息

在代码中初始化配置信息,将 AK(AccessKey)、SK(SecretKey)、BUCKET(空间名)等信息设置为常量。示例如下:

String accessKey = "your accessKey";
String secretKey = "your secretKey";
Auth auth = Auth.create(accessKey, secretKey);
String bucket = "your bucket name";
  1. 上传文件

使用七牛云的 SDK 完成文件上传的过程,代码如下:

Configuration cfg = new Configuration(Zone.autoZone());
UploadManager uploadManager = new UploadManager(cfg);
// 生成上传凭证,然后准备文件上传
String localFilePath = "文件本地路径";
String key = "指定文件名";
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) {
    Response r = ex.response;
    System.err.println(r.toString());
    try {
        System.err.println(r.bodyString());
    } catch (QiniuException ex2) {
        // ignore
    }
}

其中,localFilePath 表示要上传的文件在本地机器中的路径;key 表示上传到七牛云存储中的文件名;upToken 表示用户上传凭证。上传完成后,可以得到上传成功后的文件名和 hash 值。

  1. 下载文件

使用七牛云的 SDK 完成文件下载的过程,代码如下:

// 创建授权凭证
Auth auth = Auth.create(accessKey, secretKey);
// 文件名
String fileName = "下载文件名称";
// 公共空间域名
String domainOfBucket = "公共空间域名";
String finalUrl = String.format("%s/%s", domainOfBucket, fileName);
// 对文件名进行 URL 安全的 Base64 编码
String publicUrl = auth.privateDownloadUrl(finalUrl);
// 使用 OkHttp 完成文件的下载
Response response = new OkHttpClient().newCall(new Request.Builder().url(publicUrl).build()).execute();
try (InputStream inputStream = response.body().byteStream(); FileOutputStream fileOS = new FileOutputStream(fileName)) {
    byte[] buffer = new byte[2048];
    int length;
    while ((length = inputStream.read(buffer)) != -1) {
        fileOS.write(buffer, 0, length);
    }
} catch (IOException e) {
    e.printStackTrace();
}

其中,fileName 表示要下载的文件名称;domainOfBucket 表示公共空间域名。使用上述代码,可以完成文件的下载并保存到本地。

示例说明

下面是两个示例,一个是将本地图片上传到七牛云存储中,一个是从七牛云存储中下载图片并保存到本地。

  1. 图片上传示例:
public static void main(String[] args) {
    // 初始化配置信息
    String accessKey = "your accessKey";
    String secretKey = "your secretKey";
    String bucket = "your bucket name";
    Auth auth = Auth.create(accessKey, secretKey);
    Configuration cfg = new Configuration(Zone.autoZone());
    UploadManager uploadManager = new UploadManager(cfg);

    // 生成上传凭证,然后准备文件上传
    String localFilePath = "本地图片路径";
    String key = "上传文件名";
    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) {
        Response r = ex.response;
        System.err.println(r.toString());
        try {
            System.err.println(r.bodyString());
        } catch (QiniuException ex2) {
            // ignore
        }
    }
}

在本地存在一张图片,路径为 "D:\Pictures\test.png",该图片将通过上述代码上传到七牛云存储中,并输出上传成功后的文件名和 hash 值。

  1. 图片下载示例:
public static void main(String[] args) {
    // 初始化配置信息
    String accessKey = "your accessKey";
    String secretKey = "your secretKey";
    String domainOfBucket = "域名";
    String fileName = "下载文件名";
    Auth auth = Auth.create(accessKey, secretKey);
    String finalUrl = String.format("%s/%s", domainOfBucket, fileName);
    String publicUrl = auth.privateDownloadUrl(finalUrl);
    try {
        // 使用 OkHttp 完成文件的下载
        Response response = new OkHttpClient().newCall(new Request.Builder().url(publicUrl).build()).execute();
        try (InputStream inputStream = response.body().byteStream(); FileOutputStream fileOS = new FileOutputStream(fileName)) {
            byte[] buffer = new byte[2048];
            int length;
            while ((length = inputStream.read(buffer)) != -1) {
                fileOS.write(buffer, 0, length);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

在七牛云存储中已存在一张名为 "test.png" 的图片,该图片将通过上述代码下载并保存到本地,并用该图片的名称命名。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现七牛云文件图片上传下载 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Mybatis一对多和多对一处理的深入讲解

    Mybatis一对多和多对一处理的深入讲解 一对多处理 一对多处理是指一个实体(表)有多个关联实体(表)的关系。例如,一个订单可以包含多个商品,那么在订单表和商品表之间就有了一对多的关系。 处理方式 一对多处理在Mybatis中主要通过两种方式进行: 嵌套查询方式 嵌套结果方式 两种方式的区别在于对于关联实体的处理方式不同。 嵌套查询方式 嵌套查询方式是指在…

    database 2023年5月22日
    00
  • MySql获取当前时间并转换成字符串的实现

    下面是MySQL获取当前时间并转换成字符串的实现攻略。 方法一:使用DATE_FORMAT函数 MySQL中可以使用DATE_FORMAT函数将日期时间类型转换成指定格式的字符串。以下是使用DATE_FORMAT函数获取当前时间并转换成字符串的语句: SELECT DATE_FORMAT(NOW(), ‘%Y-%m-%d %H:%i:%s’); 执行此语句,…

    database 2023年5月22日
    00
  • MySQL子查询注意事项

    MySQL子查询是指在一个查询语句中嵌套另一个查询语句,通常是在WHERE子句中使用。下面详细介绍MySQL子查询的注意事项。 子查询要用小括号包含起来。 子查询可以嵌套多层。 子查询可以在SELECT、FROM、WHERE、HAVING等语句中使用。 子查询与主查询是相互独立的,即子查询能够单独执行。 子查询返回的结果只能是一行或一列,否则会报错。 子查询…

    MySQL 2023年3月9日
    00
  • 深入SQLite基本操作的总结详解

    深入SQLite基本操作的总结详解 1. SQLite简介 SQLite是一种嵌入式关系数据库管理系统。它是一个零配置的数据库,这意味着与其他数据库不同,您无需在系统中配置或管理SQLite。因为SQLite是嵌入式的,所以您不需要一个专门的服务器进程来管理数据库。它是轻量、快速和易于使用的。 2. SQLite基本操作 2.1. 创建数据库以及数据表 在S…

    database 2023年5月21日
    00
  • mysql备份的三种方式详解

    MySQL备份的三种方式详解 为什么需要备份MySQL? MySQL是一种非常重要的关系型数据库管理系统,为了避免数据丢失和避免服务停机时间过长,我们需要定期备份MySQL数据。定期备份MySQL可以对数据和系统进行还原,使得备份数据成为企业保障业务连续性和数据完整性的非常重要的一部分。 备份MySQL的三种方式 MySQL备份方法可以分为以下三种: 物理备…

    database 2023年5月22日
    00
  • OS 2 and FreeBSD

    让我来详细讲解一下OS 2和FreeBSD的完整攻略,以及过程中的实例说明。 首先,我们需要理解OS 2和FreeBSD这两个操作系统。OS 2是一种和Windows和Unix有关系的操作系统。它由IBM和微软公司联合开发。OS 2具有Windows和Unix的某些特点,例如Windows的用户友好型和Unix的多用户能力。而FreeBSD则是一种自由的Un…

    database 2023年3月27日
    00
  • MySQL格式化时间date_format

    select date_format(deal_date, ‘%Y年%m月%d日 %H时%i分%s秒’), date_format(deal_date, ‘%Y-%m-%d %H:%i:%s’) from tb_sm_queue_log  

    MySQL 2023年4月13日
    00
  • SQL数据库十四种案例介绍

    SQL数据库十四种案例介绍 简介 本文将详细介绍SQL数据库的十四种案例,包括基本查询、聚合查询、多表连接查询、子查询等多种常用查询方式,帮助初学者理解SQL查询的基本语法和实现方式。 基本查询 基本查询是SQL查询的入门级别,其语法简单易懂,是初学者学习SQL查询的必备内容。基本查询语法如下: SELECT column1, column2, … FR…

    database 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部