JAVA寫了一個七牛雲上傳檔案圖片的小工具
阿新 • • 發佈:2019-06-10
上傳圖片只能上傳png,jpg,jpeg等格式的,靜態程式碼塊載入配置檔案。
因為檔名必須經過簡單加密名字上傳,所以需要獲取圖片格式,對originalName進行處理。
依賴:自定義ImageType列舉類。
功能:
public static String uploadToQiNiu(InputStream inputStream,String key) //上傳內容到七牛雲,不做任何修飾
public static String uploadFileToQiNiu(InputStream inputStream,String key) //同上,修改含義,上傳的是“檔案”
public static String uploadImageToQiNiu(MultipartFile file) //傳入一個MultipartFile圖片,上傳到七牛雲並返回圖片連結
private static ImageType getImgType(String originalImageName) //內部方法,用於獲取圖片型別,比如PNG JPG JPEG,因為涉及到對檔名進行MD5加密,必須保留檔案字尾,該字尾僅對圖片生效。
private static String getTail(String fileOriginName) //內部方法,獲取尾巴,如 .png .jpg .jpeg
程式碼如下:
package xyz.ruankun.machinemother.util.constant;
/**
* 圖片都有什麼格式呢?!常用的就這幾個格式吧?點陣圖不算了
*/
public enum ImageType {
JPG,JPEG,PNG,GIF
}
package xyz.ruankun.machinemother.util;
import com.google.gson.Gson;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import xyz.ruankun.machinemother.util.constant.ImageType;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Properties;
/**
* 物件儲存工具
*/
public class QiNiuFileUtil {
private static final Logger logger = LoggerFactory.getLogger(QiNiuFileUtil.class);
private static String accessKey;
private static String secretKey;
private static String dns;
/**
* 載入七牛雲的配置檔案
*/
static{
Properties properties = new Properties();
InputStream inputStream = QiNiuFileUtil.class.getClassLoader()
.getResourceAsStream("qiniuyun.properties");
try {
properties.load(inputStream);
accessKey = properties.getProperty("accessKey");
secretKey = properties.getProperty("secretKey");
dns = properties.getProperty("dns");
} catch (IOException e) {
logger.error("qiniu cloud load properties[name:qiniuyun.properties] in classpath failed.");
e.printStackTrace();
}
}
/**
*
* 上傳檔案到七牛雲的工具
* @param inputStream
* @return
*/
public static String uploadToQiNiu(InputStream inputStream,String key){
if(inputStream == null){
logger.info("傳入的圖片二進位制流不存在,忽略上傳過程");
return null;
}
//zone0表示華東區域,該bucket在華東
Configuration configuration = new Configuration(Zone.zone0());
UploadManager uploadManager = new UploadManager(configuration);
String bucket = "public";
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
//System.out.println(upToken);
try {
Response response = uploadManager.put(inputStream,key,upToken,null,null);
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
return getDns() + "/" + putRet.key;
} catch (IOException e) {
e.printStackTrace();
}
logger.info("請求時發生了錯誤資訊");
return null;
}
/**
* 傳檔案
* @param inputStream
* @param key
* @return 檔案路徑
*/
public static String uploadFileToQiNiu(InputStream inputStream,String key){
return uploadToQiNiu(inputStream,key);
}
/**
* MD5 KEY
* @param file
* @return
*/
public static String uploadImageToQiNiu(MultipartFile file){
InputStream inputStream = null;
try {
inputStream = file.getInputStream();
} catch (IOException e) {
e.printStackTrace();
return null;
}
String tail = getTail(file.getOriginalFilename());
return uploadToQiNiu(inputStream,MD5Util.md5(new Date().toString()) + tail);
}
public static String getDns(){
return dns;
}
/**
* 判斷圖片的格式,只支援jpg jpeg png gif
* @param originalImageName
* @return
*/
private static ImageType getImgType(String originalImageName){
if (originalImageName.toLowerCase().indexOf(".jpg") > 0)
return ImageType.JPG;
if (originalImageName.toLowerCase().indexOf(".jpeg") > 0)
return ImageType.JPEG;
if (originalImageName.toLowerCase().indexOf(".png") > 0)
return ImageType.PNG;
if (originalImageName.toLowerCase().indexOf(".gif") > 0)
return ImageType.GIF;
return null;
}
/**
* 從其中拿到圖片字尾
* @param fileOriginName 檔名
* @return
*/
private static String getTail(String fileOriginName){
ImageType type = getImgType(fileOriginName);
String tail = null;
switch (type){
case GIF:
tail = ".gif";
break;
case JPEG:
tail = ".jpeg";
break;
case JPG:
tail = ".jpg";
break;
case PNG:
tail = ".png";
break;
}
return tail;
}
}