又拍云(Upyun)刷新CDN,云存储缓存 —JavaAPI

JSON 2018-01-22 22:52:33 6502

最近在使用又拍云,今天搞这个缓存刷新搞了一会,是我的粗心导致,下面就说下这个刷新 URL API吧,

已经咨询过客服,已弃用的意思是不再维护了,还可以用。也确认了,刷新只有这一个 API。要不只有手动刷新了。

登陆  又拍云  后,手动刷新链接地址:https://console.upyun.com/purge/purge_url/


具体操作自己琢磨,没难度。下面看看官方描述的 API。

缓存刷新(已弃用)

当源站的资源发生变更后,可以调用该 API 接口告知又拍云刷新缓存,缓存更新后,用户访问时会获取到更新后的资源。

特别地,使用又拍云存储会在资源变更后,自动刷新缓存,省去使用自主源站缓存刷新这一步。

API 地址

http://purge.upyun.com/purge/
curl -X POST \
    http://purge.upyun.com/purge/ \
    -H "Authorization: <your_authorization>" \
    -H "Date: <date>" \
    -F purge=<url-list>
  1. 将需要刷新的文件 URL(以 http:// 开头) 以 \n 为间隔符连接
  2. 将第 1 步所得字符串、空间名、日期(GMT 格式)、经过 MD5 处理后的操作员密码用 & 拼接
  3. 将第 2 步所得字符串进行 MD5 编码处理,所得记为 sign,
  4. 最后,将空间名,操作员名和第 3 步所得的 sign 以如下格式作为请求头参数传递:
Authorization: UpYun <bucket-name>:<operator-name>:<sign>

响应状态

状态码说明
200json 格式的字符串{invalid_domain_of_url:不属于自己域名的 url 列表}
401无认证头部信息(Authorization)(提示信息:Need Authorization Header)
401无认证头部信息(Date)(提示信息:Need Date Header)
401操作员不存在(提示信息:User is not exists)
401空间名不存在(提示信息:Bucket is not exists)
401请求时间超出 30 分钟(提示信息:Date offset error)
401签名错误(提示信息:Sign error)
406每分钟刷新 URL 个数超过 600 限制

那下面我们来尝试下   Java   使用这个刷新 API

Java 操作又拍云刷新 URL

直接上代码了,这里要说明几个包,Http 是我自己封装的,还不成熟,暂时不对外开放。你直接用你自己的   http   请求,或者用 HttpPost 也可以,待会都会讲到。


import com.google.gson.Gson;
import com.sojson.common.utils.Http;
import org.apache.commons.lang.StringUtils;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 *
 * UpYun 操作方法合集
 *
 *
 */
public class UpyunCDNUtils {


    /**
     * 缓存刷新
     * @param urls
     */
    public static void refresh(String ...urls){


        String bucket = "空间名";
        String password = "明文密码";
        String userName = "操作员";
        //GMT 格式的 date
        String gmt = getGMTDate();

        //把 url 数组,以 \n 间隔
        String urlParms = StringUtils.join(urls, "\n");

        //拼接签名sign
        String sign = md5(new StringBuffer(urlParms)
        .append("&").append(bucket)
        .append("&").append(gmt)
        .append("&").append(md5(password)).toString());
        //构建 Authorization
        String auth = new StringBuffer("UpYun ")
                .append(bucket).append(":")
                .append(userName).append(":")
                .append(sign).toString();

        //Authorization格式:UpYun <bucket-name>:<operator-name>:<sign>
        Http http = Http.create("http://purge.upyun.com/purge/");
        http.head("Expect","");
        http.head("Date",gmt);
        http.head("Authorization",auth);

        http.body("purge", urlParms);

        Http result = http.post()//post 请求
                .requestCount(3)//重试3次
                .timeout(1)//10秒超时,因为这个接口会经常超时
                .send();//发送请求
        //正常返回会返回{"invalid_domain_of_url":{}} ,并且 httpcode "status":200
        System.out.println(new Gson().toJson(result.getResponse()));
    }

    public static void main(String[] args) {
        refresh("https://www.sojson.com");
    }



    /**
     *  字符串 MD5加密
     * @param str
     * @return
     */
    public static String md5(String str) {
        String result = "";
        byte[] temp = null;
        MessageDigest md5 = null;

        try {
            md5 = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        try {
            temp = md5.digest(str.getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }


        for (int i = 0; i < temp.length; i++) {
            result += Integer.toHexString((0x000000ff & temp[i]) | 0xffffff00).substring(6);
        }
        return result;
    }
    /**
     * 获取 GMT 格式时间戳
     * @return
     */
    private static  String getGMTDate() {
        SimpleDateFormat df = new SimpleDateFormat(
                "E, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US);
        df.setTimeZone(TimeZone.getTimeZone("GMT"));
        return df.format(new Date());
    }
}

关键点就是拼接 Sign 的时候。

下面也给出一个完整的 Demo 链接:https://github.com/lvtongda/java-purge-sdk

如果还是不行,请与我交流。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/270.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
Upyun刷新CDN存储缓存JavaAPI
UpyunCDN存储刷新链接缓存,API实例讲解
恭喜那个做存储的七牛完成 F 轮 10 亿人民币的融资,开启旅程
SOJSON 使用又 CDN 整体架构,解决百度 SEO 方案
Java 集成阿里消息队列,日志消息存储
使用七牛存储实现图片API,自动删除图片方案合集
Shiro + EHCache 缓存的使用。
Redis缓存淘汰算法,LRU算法,LRU算法讲解。
阿里和腾讯哪个好?
24小时日志下载方法,日志合并,.gz 压缩包多个合并方法
最新文章
Golang 常见设计模式之单例模式 5651
两招提升硬盘存储数据的写入效率 4019
【程序员的实用工具推荐】 Mac 效率神器 Alfred 3420
自媒体时代的贤内助——AI 视频云 3277
如何处理大体积 XLSX/CSV/TXT 文件? 2180
AI 视频云 VS 窄带高清,谁是视频时代的宠儿 1982
Golang 常见设计模式——装饰模式详细讲解 3812
Flink 在又拍云日志批处理中的实践 17182
个推异常值检测和实战应用-又拍云 4634
TCP 和 UDP协议详细讲解,优缺点分析讲解 13798
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 670531
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 646549
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 567966
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 530781
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 504933
Elasticsearch教程(四) elasticsearch head 插件安装和使用 473939
免费天气API,天气JSON API,不限次数获取十五天的天气预报 443064
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 239383
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 226122
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 217734
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...