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

yizhihongxing

下面是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日

相关文章

  • Linux服务器要如何启动oracle数据库(命令启动法)

    启动 Oracle 数据库需要使用 Oracle listener 和 Oracle instance,而启动 Oracle listener 和 instance 又需要在 Linux 系统中运行相应的脚本。下面是启动 Oracle 数据库的完整攻略,包括了必要的命令和步骤,并附带了两条示例说明: 确保 Oracle 账户已登录 在 Linux 系统中启动…

    database 2023年5月22日
    00
  • linux系统中使用openssl实现mysql主从复制

    下面是详细讲解“linux系统中使用openssl实现mysql主从复制”的完整攻略。 1. 环境准备 在进行主从复制之前,需要确保主从服务器上已经安装了MySQL数据库,并且已经成功地进行了一次初始同步,保证主从服务器上的数据是一致的。此外,需要在主从服务器上安装openssl工具包,并生成公钥和私钥。 2. 配置主服务器 2.1 修改my.cnf配置文件…

    database 2023年5月22日
    00
  • MySQL查询语句大全集锦

    MySQL查询语句大全集锦 简介 本篇文章是关于MySQL查询语句的大全集合,旨在帮助开发人员快速准确地进行MySQL数据的查询操作。文章包含常见的查询语句、查询技巧和案例实战等方面的内容。 常见查询语句 SELECT SELECT 语句常用于从数据库中获取数据。 示例: SELECT * FROM users; 上面的语句将选取 users 表中的所有行和…

    database 2023年5月21日
    00
  • mysql导入sql文件报错 ERROR 2013 2006 2002

    当使用mysql命令导入sql文件时,可能会出现ERROR 2013、ERROR 2006、ERROR 2002等错误,下面是解决这些错误的完整攻略。 1. ERROR 2013 (HY000) at line xxx: Lost connection to MySQL server during query 原因分析 ERROR 2013 (HY000)报…

    database 2023年5月18日
    00
  • mysql中的多行查询结果合并成一个

    原文:http://blog.csdn.net/lifuxiangcaohui/article/details/6132147   SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 AND md.user_id…

    MySQL 2023年4月13日
    00
  • redis 客户端库 之 spring data redis —– 源码解析系列(一)之 jedis 库连接 redis 集群

    一、背景     spring boot redis 接入 redis ,提供了两种库的方式,一是:lettuce,而是:jedis,被系列介绍接入 jedis时的源码 二、代码示例(包含maven依赖) <!– spring config –> <dependency> <groupId>org.springfram…

    Redis 2023年4月11日
    00
  • PostgreSQL使用MySQL作为外部表(mysql_fdw)

    PostgreSQL是一个开源的关系型数据库管理系统,是业界感觉较高的一款数据库,而MySQL也是个非常流行的数据库。假如我们需要在PostgreSQL中操作MySQL的表,那么可以使用mysql_fdw这个扩展模块。 mysql_fdw是PostgreSQL的外部数据连接插件,通过创建外部表与MySQL的表进行关联,就能够实现在PostgreSQL中操作M…

    database 2023年5月22日
    00
  • MySQL时间格式化date_format使用语法

    MySQL中的date_format函数可以将日期时间类型的数据格式化为字符串。其基本语法如下: date_format(date, format) 其中,date是日期时间类型的数据(比如datetime、timestamp等),format是指定的日期时间输出格式。 format参数可以使用各种格式化符号,具体使用方式如下: 格式化符号 含义 %Y 年份…

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