jhprjv2/ruoyi-common/src/main/java/com/ruoyi/common/utils/QiniuUploadUtil.java

209 lines
6.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.ruoyi.common.utils;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
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 okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import java.io.*;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
public class QiniuUploadUtil {
//设置账号的ACCESS_KEY和SECRET_KEY密钥配置
static String ACCESS_KEY = "A3MK35bMQiqNeik5Cvv7v6huki8r6S8ISO1c9iM2";
static String SECRET_KEY = "FqDnpJXCifV5sHCWZnj_tqVxXDS3wfnPZT152yB0";
static Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
static String bucketname = "cf-img";
public static String putInputStream(InputStream in,String name){
//构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone0());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
//默认不指定key的情况下以文件内容的hash值作为文件名
String key = name;
try {
String upToken = auth.uploadToken(bucketname);
Response response = uploadManager.put(in,key,upToken,null, null);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
System.out.println(putRet.toString());
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
}
}
return "http://fileimg.makalu.cc/"+name;
}
/**
* base64图片上传
* @param file64 base64
* @param name 文件名称
* @throws Exception
* "http://upload.qiniup.com/putb64/"华东空间上传域名
* "http://upload-z1.qiniu.com/putb64/"华北空间上传域名
* "http://upload-z2.qiniu.com/putb64/"华南空间上传域名
* "http://upload-na0.qiniu.com/putb64/"北美空间上传域名
* @return
* code 上传状态200上传成功
* url 上传地址code为200才有url地址
*/
public static String put64image(String file64,String name) throws Exception {
if(file64.contains(",")){
file64 = file64.substring(file64.indexOf(",")+1,file64.length());
}
String upToken = auth.uploadToken(bucketname);
//-1代表自动获取长度非华东空间需要修改上传域名
String url = "http://upload.qiniup.com/putb64/"+ -1 +"/key/"+ UrlSafeBase64.encodeToString(name);
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();
OkHttpClient client = new OkHttpClient.Builder()
.readTimeout(240, TimeUnit.SECONDS)//设置读取超时时间
.writeTimeout(120,TimeUnit.SECONDS)//设置写的超时时间
.connectTimeout(120,TimeUnit.SECONDS)//设置连接超时时间
.build();
Logger.getLogger(OkHttpClient.class.getName()).setLevel(Level.FINE);
okhttp3.Response response = client.newCall(request).execute();
String code = response.toString().substring(response.toString().indexOf("code=")+5,response.toString().indexOf(", message"));
String message = response.toString().substring(response.toString().indexOf("message=")+8,response.toString().indexOf(", url"));
System.out.println(code+"==================="+message);
String path = "";
if(code.equals("200")){
path = "http://fileimg.makalu.cc/"+name;
}
response.body().close();
return path;
}
/**
* 通过发送http get 请求获取文件资源
* @param url
* @param filepath
* @return
*/
private static void download(String url, String filepath) {
OkHttpClient client = new OkHttpClient();
Request req = new Request.Builder().url(url).build();
okhttp3.Response resp = null;
try {
resp = client.newCall(req).execute();
if(resp.isSuccessful()) {
ResponseBody body = resp.body();
InputStream is = body.byteStream();
byte[] data = readInputStream(is);
File imgFile = new File(filepath); //下载到本地的图片命名
FileOutputStream fops = new FileOutputStream(imgFile);
fops.write(data);
fops.close();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Unexpected code " + resp);
}
}
/**
* 读取字节输入流内容
* @param is
* @return
*/
public static byte[] readInputStream(InputStream is) {
ByteArrayOutputStream writer = new ByteArrayOutputStream();
byte[] buff = new byte[1024 * 2];
int len = 0;
try {
while((len = is.read(buff)) != -1) {
writer.write(buff, 0, len);
}
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return writer.toByteArray();
}
/**
* 删除指定文件及文件夹
* @param file
*/
public static void delete(File file) {
if(!file.exists()) return;
if(file.isFile() || file.list()==null) {
file.delete();
}else {
File[] files = file.listFiles();
for(File a:files) {
delete(a);
}
file.delete();
}
}
/**
* 文件下载
*
* @param targetUrl
*/
public static String downloadUtil(String targetUrl) {
String downloadUrl = auth.privateDownloadUrl(targetUrl);
String fileName = targetUrl.substring(targetUrl.length()-4,targetUrl.length());
String filePath = System.getProperty("user.dir").split("/ats")[0] +"/"+ UUID.randomUUID()+fileName;
new File(filePath);
//下载文件
download(downloadUrl, filePath);
return filePath;
}
/**生成Token*/
public static String getToken() {
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
String upToken = auth.uploadToken(bucketname);
return upToken;
}
public static void main(String[] args) {
try {
InputStream inputStream = new FileInputStream("C:\\Users\\wxw\\Desktop\\2222.png");
String fileName = UUID.randomUUID().toString().replace("-", "")+".png";
String path = putInputStream(inputStream,fileName);
System.out.println(path);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}