首先要添加七牛云的依赖:
代码如下:
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();
// }
}
}
删除本地库:直接删除本地库中的.git文件夹即可,该文件夹内容即从git中退出。.git文件内包含的是索引信息,对本地库文件不会有任何影响。重新链接远程库(remote):进入git bash命令行 输入命令 git clone https://github.com/{你的用户名}/{你的库名},加不加最后的.git貌似没影响 这时会弹出github 登录页面,输入用户名,密码 开...
ASCH智能合约支持在MacOS、Ubuntu、和Windows三种平台下进行开发。基本安装步骤如下:安装基础依赖环境 安装VSCode及相关插件 安装ASCH智能合约开发工具 安装本地节点(可选)由于ASCH智能合约开发环境基于Node.js及VSCode为搭建,除了基础依赖环境与系统平台相关外其余部分在不同平台上类似。故基础依赖环境分系统介绍,其余部分统一介绍。1. 安装基础依...
前言 前面两篇环境已经搭建好了,接下来就是需要启动APP,如何启动app呢?首先要获取包名,然后获取launcherActivity。获取这两个关键东西的方法很多,这里就不一一多说,小伙伴们可以各显神通。小编这里主要给大家推荐一个sdk自带的实用工具aapt. aapt即Android Asset Packaging Tool,在SDK的build-tools目录下。该工具可以查...
情人节。一个有人欢喜有人愁的节日,虽然对一些单身人士不太友好,但还有不少人都在等这个节日进行表白。毕竟这个日子的成功率会高一些。情人节少不了送花送礼物,作为一个程序员,当然不会在送什么礼物上给你指点一二,但可以发挥自己的优势,给需要的朋友分享几个浪漫的表白方式,只需要在电脑上敲几行代码即可,而且十分简单,一看就会。如果暂时用不到的也可以先收藏起来,以后用得着的时候能找到。从简单到复杂先拿出这5个。先来2个不需要代码的简单方式1、最简单的Ctrl+f这个是利用的网页查找功能,在网页中打开这些字,因为
虚拟机的使用虚拟化的定义虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在-台计算机_上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的利用效率。用户在逻辑计算机上的操作体验如同真实的计算机。虚拟化的类型虚拟化的用途企业用户:将整台服务器划分为若干个小的服务器以便于对资源、权限管理互联网...
2016年计算机一级试题加答案计算机一级主要考核微型计算机基础知识和使用办公软件及因特网(Internet)的基本技能。接下来为大家提供关于计算机一级考试题及答案,希望能帮助到各位考生!一、判断正误题(共25题,每题1分)1、若要把A4单元格中的89000改为89780,只要单击该单元格,在其中插入光标,并将其插入点移至9后面,按两次Del键后删除数字9后面的两个0,然后输入数字78,按回车键后确...
刚买回了2019款的联想y7000p,系统是win10家庭版。用了几天下来,总觉得系统的小问题很多,F5刷新都有卡顿感,任务栏的快速启动用不了,经常弹出各种错误报告……上百度看了网友的方法,只解决了部分问题,最后终于失去了耐心,到itellyou网站下载原装像镜文件,自己重装系统。(win10家庭版密钥已经刻在这台电脑里,重装后不需再次激活)。全新的开始给人踏实感,各种小问题不复存在,可没两天那...
ipvs和ipvsadmipvs:内核中的协议栈上实现 ipvs是LVS软件核心,是运行在LB上的,这是个基于ip层的负载均衡。 ipvs的总体结构主要有ip包处理,负载均衡算法,系统配置和管理三个模块以及虚拟服务器与真实服务器链表组成。 ipvs管理集群服务管理服务上的RS。 一个ipvs主机可以同时定义多个cluster server,但可能会影响调度性格。...
股票问题 1.暴力求解 2. 分治法题目解析:根据价格的变化,求出股票在哪天买入哪天卖出,收益会最大。暴力求解:遍历每一个子数组区间,比较大小,并记录最大收益的开始和结束的下标代码实现:using System;namespace cchoop{ class Program { public static void Main() ...
智能门锁给我们居家更加安全、更加方便。那么它到底是又什么结构组成的呢?我们一起来看看智能门锁结构拆解。第一:电子部分1、指纹头智能锁的指纹头,主要分两种,光学指纹头和半导体指纹头。一般来说,半导体指纹头价格会高于光学指纹头,但是有些识别点数多的光学指纹头会比低档的半导体指纹头贵。2、马达马达是为智能锁提供动力的电机,是电子与机械的连接设备,力量的转换中枢,起着承上启下的重大作用。当用密码或者刷卡、...
问题:使用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实现动态的日期选择表单,使用方法: showDateSelect("date1")其中参数为表单项select的名称,然后可以用date1.value获取选择的日期. 动态的日期选择表单 function yearList(num){ var d=new Date(); var t=d.getFullYear(); var yStr=""; for(var i=t-num;