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

209 lines
6.4 KiB
Java
Raw Normal View History

2023-08-10 21:09:49 +08:00
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 code200url
*/
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();
}
}
}