• 腾讯云COS Api版本(不使用sdk)工具类


    上一篇博文实现了阿里云OSS Api版本简单的上传和下载功能,这篇文章介绍腾讯云COS Api版本的上传下载功能

    官方文档:https://cloud.tencent.com/document/product/436/7751

    工具类代码:

    import org.apache.commons.codec.binary.Hex;
    import org.apache.commons.codec.digest.DigestUtils;
    import org.apache.commons.codec.digest.HmacUtils;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    
    import javax.crypto.Mac;
    import javax.crypto.spec.SecretKeySpec;
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.security.MessageDigest;
    import java.text.SimpleDateFormat;
    import java.util.*;
    
    public class CosWebApi {
    
        private static final String bucket = "test-12xxxxx";
        private static final String SecretId = "xxxxx";
        private static final String SecretKey = "xxxx";
        private static final String host = ".cos.ap-chengdu.myqcloud.com";//根据自己购买的产品替换
    
        //资源授权有效期(分钟)
        private static final int effectiveMinu = 10;
    
        public static final String LINE_SEPARATOR = "
    ";
        public static final String Q_SIGN_ALGORITHM_KEY = "q-sign-algorithm";
        public static final String Q_SIGN_ALGORITHM_VALUE = "sha1";
        public static final String Q_AK = "q-ak";
        public static final String Q_SIGN_TIME = "q-sign-time";
        public static final String Q_KEY_TIME = "q-key-time";
        public static final String Q_HEADER_LIST = "q-header-list";
        public static final String Q_URL_PARAM_LIST = "q-url-param-list";
        public static final String Q_SIGNATURE = "q-signature";
        public static final String GET = "get";
        public static final String PUT = "put";
    
    
        public static String getGMTDate(){
            Calendar cd = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US);
            sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
            return sdf.format(cd.getTime());
        }
    
        public static String getAuthorization(Map<String, String> headers,Map<String, String> params,String httpMethod,
                                              String UriPathname) {
    
            Map<String, String> signHeaders = buildSignHeaders(headers);
            TreeMap<String, String> sortedSignHeaders = new TreeMap<>();
            TreeMap<String, String> sortedParams = new TreeMap<>();
    
            String qHeaderListStr = buildSignMemberStr(sortedSignHeaders);
            String qUrlParamListStr = buildSignMemberStr(sortedParams);
    
            sortedSignHeaders.putAll(signHeaders);
            sortedParams.putAll(params);
            String formatParameters = formatMapToStr(sortedParams);
            String formatHeaders = formatMapToStr(sortedSignHeaders);
    
            String formatStr = new StringBuilder().append(httpMethod).append(LINE_SEPARATOR)
                    .append(UriPathname).append(LINE_SEPARATOR).append(formatParameters)
                    .append(LINE_SEPARATOR).append(formatHeaders).append(LINE_SEPARATOR).toString();
    
            //增加
            Date expiredTime = new Date(System.currentTimeMillis() + effectiveMinu * 60 * 1000);
            String qKeyTimeStr, qSignTimeStr;
            qKeyTimeStr = qSignTimeStr = buildTimeStr(expiredTime);
            String hashFormatStr = DigestUtils.sha1Hex(formatStr);
            String stringToSign = new StringBuilder().append(Q_SIGN_ALGORITHM_VALUE)
                    .append(LINE_SEPARATOR).append(qSignTimeStr).append(LINE_SEPARATOR)
                    .append(hashFormatStr).append(LINE_SEPARATOR).toString();
    
            String signKey = HmacUtils.hmacSha1Hex(SecretKey, qKeyTimeStr);
            String signature = HmacUtils.hmacSha1Hex(signKey, stringToSign);
    
            String authoriationStr = new StringBuilder().append(Q_SIGN_ALGORITHM_KEY).append("=")
                    .append(Q_SIGN_ALGORITHM_VALUE).append("&").append(Q_AK).append("=")
                    .append(SecretId).append("&").append(Q_SIGN_TIME).append("=")
                    .append(qSignTimeStr).append("&").append(Q_KEY_TIME).append("=").append(qKeyTimeStr)
                    .append("&").append(Q_HEADER_LIST).append("=").append(qHeaderListStr).append("&")
                    .append(Q_URL_PARAM_LIST).append("=").append(qUrlParamListStr).append("&")
                    .append(Q_SIGNATURE).append("=").append(signature).toString();
    
            return authoriationStr;
        }
    
        //http get请求
        public static String get(String url,Map<String,String> head)throws IOException {
            HttpClient client = HttpClients.createDefault();
            HttpGet httpGet = new HttpGet(url);
            for(String key : head.keySet()){
                httpGet.setHeader(key,head.get(key));
            }
            HttpResponse response = client.execute(httpGet);
            response.getEntity().getContent();
            HttpEntity entity = response.getEntity();
            return EntityUtils.toString(entity, "utf-8");
        }
    
    
        public static String buildTimeStr(Date expiredTime) {
            StringBuilder strBuilder = new StringBuilder();
            long startTime = System.currentTimeMillis() / 1000;
            long endTime = expiredTime.getTime() / 1000;
            strBuilder.append(startTime).append(";").append(endTime);
            return strBuilder.toString();
        }
    
        public static String formatMapToStr(Map<String, String> kVMap) {
            StringBuilder strBuilder = new StringBuilder();
            boolean seeOne = false;
            for (String key : kVMap.keySet()) {
                String lowerKey = key.toLowerCase();
                String encodeKey = encode(lowerKey);
                String encodedValue = "";
                if (kVMap.get(key) != null) {
                    encodedValue = encode(kVMap.get(key));
                }
                if (!seeOne) {
                    seeOne = true;
                } else {
                    strBuilder.append("&");
                }
                strBuilder.append(encodeKey).append("=").append(encodedValue);
            }
            return strBuilder.toString();
        }
    
        private static Map<String, String> buildSignHeaders(Map<String, String> originHeaders) {
            Map<String, String> signHeaders = new HashMap<>();
            for (String key : originHeaders.keySet()) {
    
                if (key.equalsIgnoreCase("content-type") || key.equalsIgnoreCase("content-length")
                        || key.equalsIgnoreCase("content-md5") || key.startsWith("x")
                        || key.startsWith("X")) {
                    String lowerKey = key.toLowerCase();
                    String value = originHeaders.get(key);
                    signHeaders.put(lowerKey, value);
                }
            }
            return signHeaders;
        }
    
        public static String buildSignMemberStr(Map<String, String> signHeaders) {
            StringBuilder strBuilder = new StringBuilder();
            boolean seenOne = false;
            for (String key : signHeaders.keySet()) {
                if (!seenOne) {
                    seenOne = true;
                } else {
                    strBuilder.append(";");
                }
                strBuilder.append(key.toLowerCase());
            }
            return strBuilder.toString();
        }
    
        public static String encode(String originUrl) {
            try {
                return URLEncoder.encode(originUrl, "UTF-8").replace("+", "%20").replace("*", "%2A").replace("%7E", "~");
            } catch (UnsupportedEncodingException var2) {
                return null;
            }
        }
    
    
        public static String getObj(String key) {
            String gmtDate = getGMTDate();
            Map<String, String> headers = new HashMap<>();
            headers.put("Host",bucket + host);
            headers.put("Date",gmtDate);
    
            Map<String, String> params = new HashMap<>();
            String authorization = getAuthorization(headers, params, GET, key);
    
            Map<String, String> httpHeader = new HashMap<>();
            httpHeader.put("Host",bucket + host);
            httpHeader.put("Date",gmtDate);
            httpHeader.put("Authorization",authorization);
    
            try {
                return get("https://" + bucket + host + key, httpHeader);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            return null;
        }
    
    
        ////////////////////////////////////////////////////////////////////
        public static String shaEncode(String inStr) throws Exception {
            MessageDigest sha = null;
            try {
                sha = MessageDigest.getInstance("SHA");
            } catch (Exception e) {
                e.printStackTrace();
                return "";
            }
    
            byte[] byteArray = inStr.getBytes("UTF-8");
            byte[] md5Bytes = sha.digest(byteArray);
            StringBuffer hexValue = new StringBuffer();
            for (int i = 0; i < md5Bytes.length; i++) {
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16) {
                    hexValue.append("0");
                }
                hexValue.append(Integer.toHexString(val));
            }
            return hexValue.toString();
        }
        public static String getSecondTimestamp(Date date){
            if (null == date) {
                return "";
            }
            String timestamp = String.valueOf(date.getTime());
            int length = timestamp.length();
            if (length > 3) {
                return timestamp.substring(0,length-3);
            } else {
                return "";
            }
        }
        public static String genHMAC(String key,String src) {
            try {
                SecretKeySpec signingKey = new SecretKeySpec(key.getBytes("utf-8"), "HmacSHA1");
                Mac mac = Mac.getInstance("HmacSHA1");
                mac.init(signingKey);
                byte[] rawHmac = mac.doFinal(src.getBytes("utf-8"));
                return Hex.encodeHexString(rawHmac);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        public static void getUploadInformation(String  path,String obj) throws IOException, Exception {
            //创建连接
            URL url = new URL(path);
            HttpURLConnection connection ;
            StringBuffer sbuffer=null;
            try {
                //添加 请求内容
                connection= (HttpURLConnection) url.openConnection();
                //设置http连接属性
                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setRequestMethod("PUT");
                connection.setRequestProperty("Content-Length", obj.toString().getBytes().length + "");
    
                connection.setReadTimeout(10000);//设置读取超时时间
                connection.setConnectTimeout(10000);//设置连接超时时间
                connection.connect();
                OutputStream out = connection.getOutputStream();
                out.write(obj.toString().getBytes());
                out.flush();
                out.close();
                //读取响应
                if (connection.getResponseCode()==200)            {
                    // 从服务器获得一个输入流
                    InputStreamReader inputStream =new InputStreamReader(connection.getInputStream());
                    BufferedReader reader = new BufferedReader(inputStream);
    
                    String lines;
                    sbuffer= new StringBuffer("");
    
                    while ((lines = reader.readLine()) != null) {
    
                        lines = new String(lines.getBytes(), "utf-8");
                        sbuffer.append(lines);                }
                    reader.close();
                }else{
    
                }
                //断开连接
                connection.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public static String putObj(String key,String content) {
            try {
                Date date_s = new Date();
                Date date_e = new Date();
                date_e.setTime(date_s.getTime() + effectiveMinu * 60 * 1000);
    
                String q_sign_algorithm = "sha1";
                String q_sign_time =getSecondTimestamp(date_s)+";"+getSecondTimestamp(date_e);
                String q_key_time = getSecondTimestamp(date_s)+";"+getSecondTimestamp(date_e);
    
    
                String SignKey = genHMAC(SecretKey, q_key_time);
                String HttpString = PUT + "
    " + key + "
    
    
    ";
                String StringToSign = q_sign_algorithm + "
    " + q_sign_time + "
    " + shaEncode(HttpString) + "
    ";
                String Signature = genHMAC(SignKey, StringToSign);
    
                String url = "https://" + bucket + host + key + "?q-sign-algorithm=" + q_sign_algorithm + "&q-ak=" + SecretId +
                        "&q-sign-time=" + q_sign_time + "&q-key-time=" + q_key_time + "&q-header-list=&q-url-param-list=&q-signature=" + Signature;
    
                getUploadInformation(url, content);
                return key;
            } catch (Exception ex) {
                System.out.println("上传失败:" + ex.getMessage());
                return null;
            }
        }
    
      //调用示例
        public static void main(String[] args) {
    
            String putResult = putObj("/test/2333333.txt", "test content");
            System.out.println("putResult:" + putResult);
    
            String getResult = getObj(putResult);
            System.out.println("getResult:" + getResult);
        }
    }

    引入jar包

    <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.13</version>
    </dependency>
    
    <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.1</version>
    </dependency>
  • 相关阅读:
    .NetCore 导出Execl
    10块钱可以喝几瓶?
    menuStrip鼠标滑过自动弹出
    静态变量
    DataTable.SELECT日期类型筛选处理
    Java中accept()阻塞是如何实现的
    L1正则在0处不可导怎么办?
    L1和L2正则化原理推导.md
    5局3胜和3局2胜哪个更容易赢.md
    Java集合(一): 集合框架Collection和Map
  • 原文地址:https://www.cnblogs.com/vicF/p/11550003.html
Copyright © 2020-2023  润新知