209 lines
6.4 KiB
Java
209 lines
6.4 KiB
Java
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();
|
||
}
|
||
}
|
||
|
||
|
||
}
|