利用七牛云SDK实现文件的简单上传和下载_七牛云sdk文档_M__Y的博客-程序员秘密

技术标签: 工具类  java  

 首先要添加七牛云的依赖:

 

代码如下:

import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.ResponseBody;
import org.apache.commons.io.IOUtils;

import java.io.*;
import java.net.URLEncoder;

/**
 * @ProjectName: app-download
 * @Package: com.dongfeng.aliap
 * @ClassName: QiNiuOSSUtils
 * @Author: zhy
 * @Description: 七牛云存储
 * @Date: 2020/11/20 12:42
 * @Version: 1.0
 */
@Slf4j
public class QiNiuOSSUtils {
    private static final String ACCESS_KEY = "你的AK";

    private static final String SECRET_KEY = "你的SK";

    private static final String DOMAIN_BUCKET = "你的域名";

    private static final String BUCKET = "你的bucket";


    /**
     * 上传本地文件
     * 将异常抛出到上层,由上层进行处理
     *
     * @param path
     * @param localFilePath
     * @param key           七牛云端的key对应文件名称,此处的key需要加上路径
     * @return
     */
    public static String uploadLocalFile(String localFilePath, String path, String key) throws QiniuException, UnsupportedEncodingException {
        return uploadFile(new File(localFilePath), path, key);
    }

    /**
     * 利用七牛云上传文件
     *
     * @param path     文件需要保存的路径
     * @param file
     * @param filename 文件需要保存的名称
     * @return
     * @throws QiniuException
     */
    public static String uploadFile(File file, String path, String filename) throws QiniuException, UnsupportedEncodingException {
        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.region1());
        //...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);

        Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
        String upToken = auth.uploadToken(BUCKET);
        //默认不指定key的情况下,以文件内容的hash值作为文件名
        Response response = uploadManager.put(file, String.format("%s/%s", path, filename), upToken);
        //解析上传成功的结果
        log.debug("uploadFile response:{}", response.bodyString());
        DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
        log.debug("uploadFile response key: {}", putRet.key);
        log.debug("uploadFile response hash: {}", putRet.hash);
        return getDownloadUrl(path, filename);
    }

    /**
     * 七牛字节流上传
     *
     * @param path        在七牛云上保存的路径
     * @param inputStream
     * @param filename    文件保存的名字
     * @return
     */
    public static String uploadInputStream(InputStream inputStream, String path, String filename) throws QiniuException, UnsupportedEncodingException {
        //构造一个带指定 Region 对象的配置类,指定华北区
        Configuration cfg = new Configuration(Region.region1());
        //...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);
//        String key = null;
        Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
        String upToken = auth.uploadToken(BUCKET);
        //默认不指定key的情况下,以文件内容的hash值作为文件名
        Response response = uploadManager.put(inputStream, String.format("%s/%s", path, filename), upToken, null, null);
        log.debug("uploadInputStream response:{}", response.bodyString());
        DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
        log.debug("uploadInputStream response key: {}", putRet.key);
        log.debug("uploadInputStream response hash: {}", putRet.hash);
        return getDownloadUrl(path, filename);
    }

    /**
     * 利用七牛云获取下载链接
     *
     * @param path     文件路径
     * @param filename 文件名称
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String getDownloadUrl(String path, String filename) throws UnsupportedEncodingException {
        String encodedFileName = URLEncoder.encode(String.format("%s/%s", path, filename), "utf-8").replace("+", "%20");
        String publicUrl = String.format("%s/%s", DOMAIN_BUCKET, encodedFileName);
        Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
        //1小时,可以自定义链接过期时间
        return auth.privateDownloadUrl(publicUrl, 60 * 60);
    }

    /**
     * 下载七牛云到指定文件中
     * @param path 七牛云中的路径
     * @param filename 七牛云中的文件名称
     * @param outputFile 输出到指定的文件
     * @throws IOException
     */
    public static void download(String path, String filename, String outputFile) throws IOException {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(getDownloadUrl(path, filename)).build();
        okhttp3.Response response = client.newCall(request).execute();
        InputStream in = null;
        FileOutputStream outputStream = null;
        try {
            if (response.isSuccessful()) {
                ResponseBody body = response.body();
                in = body.byteStream();
                outputStream = new FileOutputStream(outputFile);
                IOUtils.copy(in, outputStream);
            }
        } finally {
            if (null != in) {
                in.close();
            }
            if (null != outputStream){
                outputStream.close();
            }
        }
    }


    public static void main(String[] args) throws UnsupportedEncodingException {

        //上传字节流
//        try {
//            InputStream in = new FileInputStream("D:/qiniuyun.txt");
//            String url = uploadInputStream(in, "test", "qiniuyun5");
//            System.out.println(url);
//        } catch (FileNotFoundException | QiniuException e) {
//            e.printStackTrace();
//        }

        //上传文件
//        try {
//            String url = uploadLocalFile("D:/qiniuyun.txt", "test", "qiniuyun4");
//            System.out.println(url);
//        } catch (QiniuException e) {
//            e.printStackTrace();
//        }


        //获取下载链接
//        String download = getDownloadUrl("test", "qiniuyun4");
//        System.err.println(download);


        //访问链接地址,将输入流写入到文件
//        try {
//            download("test", "qiniuyun4", "D:/qiniuyun4.txt");
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
    }
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jiaoao001/article/details/115426228

智能推荐

[GIT]删除本地库;链接远程库的一些操作_vs2022 删除git仓库_RAVEN_1452的博客-程序员秘密

删除本地库:直接删除本地库中的.git文件夹即可,该文件夹内容即从git中退出。.git文件内包含的是索引信息,对本地库文件不会有任何影响。重新链接远程库(remote):进入git bash命令行 输入命令 git clone https://github.com/{你的用户名}/{你的库名},加不加最后的.git貌似没影响 这时会弹出github 登录页面,输入用户名,密码 开...

阿希链-智能合约开发环境搭建_woaiguazi的博客-程序员秘密

ASCH智能合约支持在MacOS、Ubuntu、和Windows三种平台下进行开发。基本安装步骤如下:安装基础依赖环境 安装VSCode及相关插件 安装ASCH智能合约开发工具 安装本地节点(可选)由于ASCH智能合约开发环境基于Node.js及VSCode为搭建,除了基础依赖环境与系统平台相关外其余部分在不同平台上类似。故基础依赖环境分系统介绍,其余部分统一介绍。1. 安装基础依...

Appium+python自动化23-Android夜神模拟器操作app(2)_夜神 appactivity_crazyBird_GJY的博客-程序员秘密

前言 前面两篇环境已经搭建好了,接下来就是需要启动APP,如何启动app呢?首先要获取包名,然后获取launcherActivity。获取这两个关键东西的方法很多,这里就不一一多说,小伙伴们可以各显神通。小编这里主要给大家推荐一个sdk自带的实用工具aapt. aapt即Android Asset Packaging Tool,在SDK的build-tools目录下。该工具可以查...

七夕,程序员教你5个表白代码,2分钟学会,牢牢主抓她的心_表白代码编程教学_一见已难忘的博客-程序员秘密

情人节。一个有人欢喜有人愁的节日,虽然对一些单身人士不太友好,但还有不少人都在等这个节日进行表白。毕竟这个日子的成功率会高一些。情人节少不了送花送礼物,作为一个程序员,当然不会在送什么礼物上给你指点一二,但可以发挥自己的优势,给需要的朋友分享几个浪漫的表白方式,只需要在电脑上敲几行代码即可,而且十分简单,一看就会。如果暂时用不到的也可以先收藏起来,以后用得着的时候能找到。从简单到复杂先拿出这5个。先来2个不需要代码的简单方式1、最简单的Ctrl+f这个是利用的网页查找功能,在网页中打开这些字,因为

信息系统安全与对抗实践慕课笔记 -- Linux基础_信息系统安全和对抗实践._绀香零八的博客-程序员秘密

虚拟机的使用虚拟化的定义虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在-台计算机_上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的利用效率。用户在逻辑计算机上的操作体验如同真实的计算机。虚拟化的类型虚拟化的用途企业用户:将整台服务器划分为若干个小的服务器以便于对资源、权限管理互联网...

2016年计算机一级excel试题及答案,2016年计算机一级试题加答案_屋顶长颈鹿的博客-程序员秘密

2016年计算机一级试题加答案计算机一级主要考核微型计算机基础知识和使用办公软件及因特网(Internet)的基本技能。接下来为大家提供关于计算机一级考试题及答案,希望能帮助到各位考生!一、判断正误题(共25题,每题1分)1、若要把A4单元格中的89000改为89780,只要单击该单元格,在其中插入光标,并将其插入点移至9后面,按两次Del键后删除数字9后面的两个0,然后输入数字78,按回车键后确...

随便推点

电脑卡顿就重装系统?——可能问题只是在显卡驱动_宁子轩的博客-程序员秘密

刚买回了2019款的联想y7000p,系统是win10家庭版。用了几天下来,总觉得系统的小问题很多,F5刷新都有卡顿感,任务栏的快速启动用不了,经常弹出各种错误报告……上百度看了网友的方法,只解决了部分问题,最后终于失去了耐心,到itellyou网站下载原装像镜文件,自己重装系统。(win10家庭版密钥已经刻在这台电脑里,重装后不需再次激活)。全新的开始给人踏实感,各种小问题不复存在,可没两天那...

ipvs和ipvsadm_weixin_30828379的博客-程序员秘密

ipvs和ipvsadmipvs:内核中的协议栈上实现 ipvs是LVS软件核心,是运行在LB上的,这是个基于ip层的负载均衡。 ipvs的总体结构主要有ip包处理,负载均衡算法,系统配置和管理三个模块以及虚拟服务器与真实服务器链表组成。 ipvs管理集群服务管理服务上的RS。 一个ipvs主机可以同时定义多个cluster server,但可能会影响调度性格。...

最大子数组问题 - (暴力求解+分治法)_cchoop的博客-程序员秘密

股票问题 1.暴力求解 2. 分治法题目解析:根据价格的变化,求出股票在哪天买入哪天卖出,收益会最大。暴力求解:遍历每一个子数组区间,比较大小,并记录最大收益的开始和结束的下标代码实现:using System;namespace cchoop{ class Program { public static void Main() ...

智能门锁电路图_智能门锁结构拆解,我们一起来看看_万基酱的博客-程序员秘密

智能门锁给我们居家更加安全、更加方便。那么它到底是又什么结构组成的呢?我们一起来看看智能门锁结构拆解。第一:电子部分1、指纹头智能锁的指纹头,主要分两种,光学指纹头和半导体指纹头。一般来说,半导体指纹头价格会高于光学指纹头,但是有些识别点数多的光学指纹头会比低档的半导体指纹头贵。2、马达马达是为智能锁提供动力的电机,是电子与机械的连接设备,力量的转换中枢,起着承上启下的重大作用。当用密码或者刷卡、...

php7 wamp启动失败,配置wamp环境出现Apache无法启动的问题(一个Apache上安装多个版本PHP)..._Actor.又戈叔的博客-程序员秘密

问题:使用Apache2.4配置php7.0.6和php7.2.1,php7.0.6可以启动,而php7.2.1无法启动。httpd.conf配置参数如下:LoadModule php7_module "C:/php7.0.6/php7apache2_4.dll"PHPIniDir "C:/php7.0.6"LoadModule php7_module "C:/php7.2.1/php7apach...

JS实现动态的日期选择表单_netleaf的博客-程序员秘密

JS实现动态的日期选择表单,使用方法:  showDateSelect("date1")其中参数为表单项select的名称,然后可以用date1.value获取选择的日期.  动态的日期选择表单 function yearList(num){ var d=new Date(); var t=d.getFullYear(); var yStr=""; for(var i=t-num;

推荐文章

热门文章

相关标签