C++ OSS时间问题处理(本地时间和服务器时间)+ 时间转换

本文介绍了在C++中处理阿里云OSS服务时遇到的时间问题,包括由于本地时间错误导致的上传失败和生成下载链接时的过期时间设置。解决方案包括使用服务器GMT时间进行请求头设置以及获取服务器时间来设置下载链接的到期时间。此外,还提供了本地时间到GMT以及GMT到时间戳的转换代码。
摘要由CSDN通过智能技术生成

记一次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_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习随笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值