package com.hwrj.cloud.admin.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.hwrj.cloud.common.exception.GlobalException;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
@Slf4j
@Component
public class UploadFileUtil {
    @Value("${qiniu.accessKey}")
    private String accessKey;

    @Value("${qiniu.secretKey}")
    private String secretKey;

    @Value("${qiniu.bucket}")
    private String bucket;

    @Value("${qiniu.path}")
    private String url;

    public String uploadQiNiuFiles(@RequestParam("file") MultipartFile file, String path){
        String contentType = file.getContentType();
        String[] split = null;
        try{
            split = contentType.split("/");
        }catch (Exception e){
            throw new GlobalException("获取文件后缀出错!=======>"+split);
        }
        path = path+"."+split[split.length-1];
        //构建一个带指定对象的配置类
        Configuration cof = new Configuration(Zone.autoZone());
        UploadManager uploadManager = new UploadManager(cof);
        String uploadToken = getUploadToken();
        DefaultPutRet defaultPutRet = null;
        try{
            Response response = uploadManager.put(file.getInputStream(), path, uploadToken, null, null);
            defaultPutRet = JSON.parseObject(response.bodyString(), DefaultPutRet.class);
            log.info(JSONObject.toJSONString(defaultPutRet));
            return url+path;
        }catch (QiniuException ex){
            Response r = ex.response;
            log.error(""+r.toString());
            try {
                log.error(r.bodyString());
            } catch (QiniuException ex2) {
                //ignore
            }
        } catch (IOException e) {
            e.printStackTrace();
           return null;
        }
        return null;
    }
    /**
     * @MethodName getUploadToken
     * @Param []
     * @Return java.lang.String
     * @Author qiubo
     * @Date 2020/5/11
     * @Description 获取七牛云上传图片的token
     */
    public String getUploadToken(){
        Auth auth = Auth.create(accessKey, secretKey);
        return auth.uploadToken(bucket);
    }

    public String uploadLocalFile(String path,String url){
        Configuration cof = new Configuration(Zone.autoZone());
        UploadManager uploadManager = new UploadManager(cof);
        try {
            Response response = uploadManager.put(path, url, getUploadToken());
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            System.out.println(putRet.key);
            return putRet.key;
        } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                //ignore
            }
        }
        return null;
    }
}
