java 七牛解压缩工具类_七牛云java(服务端)通用工具类

本文介绍了如何使用Java实现七牛云的文件上传、Base64图片上传、获取文件访问地址及MultipartFile上传等功能。通过配置qiniu.properties文件设置七牛云的访问密钥、存储空间等信息,并提供了相应的工具类QiNiuConfig和QiNiuUtil。
摘要由CSDN通过智能技术生成

前言

需要安装lombok插件。

功能列表

上传本地文件

上传Base64图片

获取文件访问地址

上传MultipartFile

代码

pom.xml

com.qiniu

qiniu-java-sdk

[7.2.0, 7.2.99]

org.projectlombok

lombok

1.18.2

provided

qiniu.properties

# 七牛云配置

qiniu.access-key=你的accessKey

qiniu.secret-key=你的secretKey

qiniu.bucket=你的存储空间名称

# [{'zone0':'华东'}, {'zone1':'华北'},{'zone2':'华南'},{'zoneNa0':'北美'},{'zoneAs0':''}]

qiniu.zone=zone0

qiniu.domain-of-bucket=外链默认域名

# 链接过期时间,单位是秒,3600代表1小时,-1代表永不过期

qiniu.expire-in-seconds=-1

QiNiuConfig.java

import com.qiniu.common.Zone;

import lombok.Data;

import lombok.extern.slf4j.Slf4j;

import java.util.Properties;

/**

* 七牛云配置

*

* @author simon

* @create 2018-08-15 10:44

**/

@Slf4j

@Data

public class QiNiuConfig {

private String accessKey;

private String secretKey;

private String bucket;

private Zone zone;

private String domainOfBucket;

private long expireInSeconds;

private static QiNiuConfig instance = new QiNiuConfig();

private QiNiuConfig(){

Properties prop = new Properties();

try {

prop.load(QiNiuConfig.class.getResourceAsStream("/qiniu.properties"));

accessKey = prop.getProperty("qiniu.access-key");

secretKey = prop.getProperty("qiniu.secret-key");

bucket = prop.getProperty("qiniu.bucket");

domainOfBucket = prop.getProperty("qiniu.domain-of-bucket");

expireInSeconds = Long.parseLong(prop.getProperty("qiniu.expire-in-seconds"));

String zoneName = prop.getProperty("qiniu.zone");

if(zoneName.equals("zone0")){

zone = Zone.zone0();

}else if(zoneName.equals("zone1")){

zone = Zone.zone1();

}else if(zoneName.equals("zone2")){

zone = Zone.zone2();

}else if(zoneName.equals("zoneNa0")){

zone = Zone.zoneNa0();

}else if(zoneName.equals("zoneAs0")){

zone = Zone.zoneAs0();

}else{

throw new Exception("Zone对象配置错误!");

}

} catch (Exception e) {

e.printStackTrace();

}

}

public static QiNiuConfig getInstance(){

return instance;

}

public static void main(String[] args) {

System.out.println(QiNiuConfig.getInstance().getAccessKey());

}

}

QiNiuUtil.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.UploadManager;

import com.qiniu.storage.model.DefaultPutRet;

import com.qiniu.util.Auth;

import com.qiniu.util.UrlSafeBase64;

import lombok.extern.slf4j.Slf4j;

import okhttp3.OkHttpClient;

import okhttp3.Request;

import okhttp3.RequestBody;

import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import java.net.URLEncoder;

/**

* 七牛上传下载工具类

*

* @author simon

* @create 2018-08-15 11:21

**/

@Slf4j

public class QiNiuUtil {

/**

* 上传本地文件

* @param localFilePath 本地文件完整路径

* @param key 文件云端存储的名称

* @param override 是否覆盖同名同位置文件

* @return

*/

public static boolean upload(String localFilePath, String key, boolean override){

//构造一个带指定Zone对象的配置类

Configuration cfg = new Configuration(QiNiuConfig.getInstance().getZone());

//...其他参数参考类注释

UploadManager uploadManager = new UploadManager(cfg);

//...生成上传凭证,然后准备上传

Auth auth = Auth.create(QiNiuConfig.getInstance().getAccessKey(), QiNiuConfig.getInstance().getSecretKey());

String upToken;

if(override){

upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket(), key);//覆盖上传凭证

}else{

upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket());

}

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);

return true;

} catch (QiniuException ex) {

Response r = ex.response;

System.err.println(r.toString());

try {

System.err.println(r.bodyString());

} catch (QiniuException ex2) {

//ignore

return false;

}

return false;

}

}

/**

* 上传Base64图片

* @param l 图片没经过base64处理的原图字节大小,获取文件大小的时候,切记要通过文件流的方式获取。而不是通过图片标签然后转换后获取。

* @param file64 图片base64字符串

* @param key 文件云端存储的名称

* @param override 是否覆盖同名同位置文件

* @return

* @throws IOException

*/

public static boolean uploadBase64(int l, String file64, String key, boolean override) throws IOException{

/*FileInputStream fis = null;

int l = (int) (new File(localFilePath).length());

byte[] src = new byte[l];

try {

fis = new FileInputStream(new File(localFilePath));

fis.read(src);

}catch (FileNotFoundException e){

e.printStackTrace();

log.error(e.getMessage());

log.error("图片文件读取失败");

return false;

}

String file64 = Base64.encodeToString(src, 0);*/

Auth auth = getAuth();

String upToken;

if(override){

upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket(), key);//覆盖上传凭证

}else{

upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket());

}

String url = "http://upload.qiniup.com/putb64/" + l+"/key/"+ UrlSafeBase64.encodeToString(key);

//非华东空间需要根据注意事项 1 修改上传域名

RequestBody rb = RequestBody.create(null, file64);

Request request = new Request.Builder().

url(url).

addHeader("Content-Type", "application/octet-stream")

.addHeader("Authorization", "UpToken " + upToken)

.post(rb).build();

//System.out.println(request.headers());

OkHttpClient client = new OkHttpClient();

okhttp3.Response response = client.newCall(request).execute();

//System.out.println(response);

return response.isSuccessful();

}

/**

* 获取文件访问地址

* @param fileName 文件云端存储的名称

* @return

* @throws UnsupportedEncodingException

*/

public static String fileUrl(String fileName) throws UnsupportedEncodingException {

String encodedFileName = URLEncoder.encode(fileName, "utf-8");

String publicUrl = String.format("%s/%s", QiNiuConfig.getInstance().getDomainOfBucket(), encodedFileName);

Auth auth = getAuth();

long expireInSeconds = QiNiuConfig.getInstance().getExpireInSeconds();

if(-1 == expireInSeconds){

return auth.privateDownloadUrl(publicUrl);

}

return auth.privateDownloadUrl(publicUrl, expireInSeconds);

}

/**

* 上传MultipartFile

* @param file

* @param key

* @param override

* @return

* @throws IOException

*/

public static boolean uploadMultipartFile(MultipartFile file, String key, boolean override) {

//构造一个带指定Zone对象的配置类

Configuration cfg = new Configuration(QiNiuConfig.getInstance().getZone());

//...其他参数参考类注释

UploadManager uploadManager = new UploadManager(cfg);

//把文件转化为字节数组

InputStream is = null;

ByteArrayOutputStream bos = null;

try {

is = file.getInputStream();

bos = new ByteArrayOutputStream();

byte[] b = new byte[1024];

int len = -1;

while ((len = is.read(b)) != -1){

bos.write(b, 0, len);

}

byte[] uploadBytes= bos.toByteArray();

Auth auth = getAuth();

String upToken;

if(override){

upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket(), key);//覆盖上传凭证

}else{

upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket());

}

//默认上传接口回复对象

DefaultPutRet putRet;

//进行上传操作,传入文件的字节数组,文件名,上传空间,得到回复对象

Response response = uploadManager.put(uploadBytes, key, upToken);

putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);

System.out.println(putRet.key);//key 文件名

System.out.println(putRet.hash);//hash 七牛返回的文件存储的地址,可以使用这个地址加七牛给你提供的前缀访问到这个视频。

return true;

}catch (QiniuException e){

e.printStackTrace();

return false;

}catch (IOException e) {

e.printStackTrace();

return false;

}

}

public static Auth getAuth(){

Auth auth = Auth.create(QiNiuConfig.getInstance().getAccessKey(), QiNiuConfig.getInstance().getSecretKey());

return auth;

}

}

推荐

oauthserver是一个基于Spring Boot Oauth2的完整的独立的Oauth2 Server微服务。仅仅需要创建相关数据表,修改数据库的连接信息,你就可以得到一个Oauth2 Server微服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值