1. 程式人生 > >JAVA寫了一個七牛雲上傳檔案圖片的小工具

JAVA寫了一個七牛雲上傳檔案圖片的小工具

上傳圖片只能上傳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;
    }
}