利用七牛云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

智能推荐

Qt之QStackedWidget_qt stacked widget_wuyu92877的博客-程序员秘密

本文转载:http://blog.csdn.net/liang19890820/article/details/51614346简述QStackedWidget继承自QFrame。QStackedWidget类提供了多页面切换的布局,一次只能看到一个界面。QStackedWidget可用于创建类似于QTabWidget提供的用户界面。

深度优先搜索&&广度优先搜索 训练赛_acm竞赛试题关于深度优先,广度优先的题目_Gamer_Lee的博客-程序员秘密

目录A - Oil Deposits   (POJ-1562)DFSD - Prime Ring Problem  (HDU-1016)DFSE - A计划  (HDU-2102)BFSF - 胜利大逃亡  (HDU 1253)BFSH - A  Strange Lift(HDU 1548)BFSI - Catch That Cow  (HDU 2717)深度优先搜索(...

教程(五)— FME中的关闭Python脚本_python 关闭脚本_fmechina的博客-程序员秘密

前言本文是五篇系列文章中的最后一篇,主要介绍了如何在FME Workbench中使用“关闭Python脚本”功能,并且分别列举了通过电子邮件发送转换统计信息,使用默认应用程序打开输出数据集以及写入转换历史日志等三个示例。1.介绍Python脚本不仅可以在工作空间开始运行前被执行,也可以等工作空间运行完成后再执行,这就是“关闭Python脚本”功能。当您想在工作空间运行完后将文件复制到某个地方,又或者是使用非DataInspector的应用程序打开输出数据集的时候都可以用到它。“关闭Pytho

CaChe基本概念及工作原理_cache的基本概念_aaronbin的博客-程序员秘密

CaChe计算机中程序执行时所有的指令和数据都是从存储器中取出来执行的。存储器是计算机系统中的重要组成部分,相当于计算机的仓库,用来存放各类程序及其处理的数据。因此存储器的容量和性能应当随着处理器的速度和性能的提高而通过提高,以保持系统性能的平衡。 然而在过去的 20 多年中,随着时间的推移,处理器和存储器在性能发展上的差异越来越大,存储器在容量尤其是访问延时方面的性能增长越来越跟不上处理器性能发展的需要。为了缩小存储器和处理器两者之间在性能方面的差距,通常在计算机内部采用层次化的存储器体系结构。从

fastjson使用大坑:JSON.parseObject()时报错asm deserialize error_jsonobject.parseobject报错_Creepin_的博客-程序员秘密

fastjson使用大坑:JSON.parseObject()时报错asm deserialize error需要注意的是fastjson在序列化和反序列化的时候,默认是开启ASM的。(关闭即可解决报错)何为asm?FastJson对于json格式字符串的解析主要用到了一下三个类:Json字符串转java对象Json字符串转json对象

随便推点

重启osd服务失败:Start request repeated too quickly_styshoo的博客-程序员秘密

背景  OS:Ubuntu 16.04   修改了osd的一些配置,修改后,需要重启osd服务才能生效。第一次重启后,配置立刻生效。再改了一些配置,重启osd服务后,配置却不再生效了。ps命令查看进程,发现osd进程都没有启动。 分析  osd进程未启动,第一直觉就是配置出错,osd进程启动后又挂掉。于是,进入/var/log/ceph目录,查看ceph-osd.0.log,发现日志末尾只有关闭

VMware虚拟机过大开机卡在/dev/sda1:clean,***files,***blocks解决方案_虚拟机启动黑屏 blocks_下苦功夫的博客-程序员秘密

1.通过ctrl + alt + F3进入文本模式,需要提前记得用户名和密码如果输入用户名和密码特别慢,在重启下虚拟机操作系统试试df -h //用于查看已经挂载的硬盘使用情况sudo apt-get autoremove//卸载所有自动安装且不再使用的软件包sudo apt autoremove --purge snapdreboot //重启...

SpringMVC面试专题_小飞侠v科比的博客-程序员秘密

1、什么是 SpringMvc?答:SpringMvc 是 spring 的一个模块,基于 MVC 的一个框架,无需中间整合层来整合。2、Spring MVC 的优点:答:1)它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java组件.并且和 Spring 提供的其他基础结构紧密集成.2)不依赖于 Servlet API(目标虽是如此,但是在实现的时候确...

LVS负载均衡集群实验---DR模式_zz121104的博客-程序员秘密

虚拟机准备VMware Workstation 15 PROCPU:2U内存:1G硬盘:20G网卡模式:仅主机Linux系统:CentOS 6.8虚拟机数量:三台注意:以上配置可根据自己的情况调整虚拟机初始化关闭iptables8. service iptables stop 关闭iptables9. chkconfig iptables off 取消iptable...

从大学里计算机专业名称的变化看计算机技术的发展_weixin_34362875的博客-程序员秘密

这几天是高考填报志愿的日子,有个哥们家的孩子高考之后想报考计算机专业,但是他对计算机专业不太了解。我大概给他说了一下,希望对他有点帮助。 各个大学刚开始开设计算机专业大概是一九九几年,计算机专业前大概在最初的几年是冷门,那时候没几个人知道计算机是什么东东,但是后来,计算机专业越来越热。报考计算机的学生越来越多,分数逐年上升,可以说现在也是最热的专业之一。 一...

Spring RequestScope和SessionScope的来龙去脉_lan_qie的博客-程序员秘密

Spring在bean配置时可以配置scope(bean的作用域),主要用来控制bean的生命周期,在spring2.0之前bean只有2种作用域即:singleton(单例)、non-singleton(也称prototype), Spring2.0以后,增加了session、request、global session三种专用于Web应用程序上下文的Bean。所以,默认情况下Spring2...

推荐文章

热门文章

相关标签