记一次oss问题处理403RequestTimeTooSkewed The difference between the request time and the current time is too large.(本地时间和服务器时间不一致)+时间转换
一、背景介绍
客户端将文件上传至oss,同时生成下载链接供后面使用,网上查了很久没有找到具体的方法,尝试了很多方式,下面对最后使用方式进行简单总结。
两个问题:1.上传过程本地时间原因造成的错误error: 403RequestTimeTooSkewed The difference between the request time and the current time is too large.
2.下载时根据本地时间设置到期时间造成的问题
同时另附GMT时间转换代码:本地转gmt,gmt转时间戳(其实gmt转时间戳apr_date.h中有方法,详见下文)
OSS GMT格式为:Sat, 19 Sep 2020 08:08:27 GMT
二、问题处理
1.1. 上传时本地时间错误导致的问题
修改前代码简单调用,使用如下(参数不一一介绍)
代码如下(示例):
aos_table_t *headers = NULL;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = oss_put_object_from_file(oss_client_options, &bucket, &dname, &file, headers, &resp_headers);
使用该方式客户端时间错误会造成问题。分析该问题可以使用oss时间放入请求头来解决。下面就是需要分析如何拿服务器GMT时间,查看内存发现响应头中可以拿到,如下
所以此次采取上传失败的话采取重传策略。
该请求结束后,根据resp_status 判断是否上传成功,根据resp_status->code判断错误类型,如果为403,可通过以下代码加入时间重新上传
const char* GMTtime=apr_table_get(resp_headers, "Date");
headers = aos_table_make(pool, 1);
apr_table_set(headers, "x-oss-date", GMTtime);
aos_status_t *resp_statusre = oss_