开发者社区> 问答> 正文

oss如何修正上传本地时间不对,导致上传失败的问题

现在遇到的问题是,本地的时间不对,上传文件失败。也就是我只要传入正确的时间,就可以成功。  
问题1: 是否是在初始化options时传入正确时间    options->ctl->start_time   这边有个开始时间   而且 在后续的函数aos_curl_http_transport_perform 中 有以下代码:
    t->controller->start_time = apr_time_now();
    code = curl_easy_perform(t->curl);
   t->controller->finish_time = apr_time_now();                                           这边传入的时间戳
问题2: apr_time_now()  给出的时间戳是64位的   怎么给64的时间戳。


不知道问题是否描述清楚了,  希望得到解答。    其实就是怎么把正确的Sever时间传入OSS   谢谢。

展开
收起
莫相离sky 2015-08-31 18:02:36 9494 0
2 条回答
写回答
取消 提交回答
  • 回 楼主(莫相离sky) 的帖子
    建议还是找一下为什么本地时间不对的原因,把本地时间校对,时间不对主要是影响签名。你贴出来的代码的作用是给用户一些基本的使用sdk的性能参考

    -------------------------

    回 3楼(莫相离sky) 的帖子
    故意调成错的是因为时区还是其他原因?

    -------------------------

    回 5楼(莫相离sky) 的帖子
    如果是你说的那个原因,那正确时间怎么获取,每次都把系统时间减去预期的偏差?写出来的程序下次换一个环境就出问题了

    -------------------------

    回 8楼(莫相离sky) 的帖子
    如果一定要使用这种方式,那可以在request header里面增加一个x-oss-date请求头,必须为HTTP1.1中支持的GMT格式,具体可以参考OSS API文档中签名部分有关DATE的说明。当用户在请求头中指定了x-oss-date,sdk会优先选用用户指定的时间,试一下。

    -------------------------

    回 12楼(莫相离sky) 的帖子
    是否可以提供一下你的request id,我们通知oss 同学看一下这个问题,建议更新一下c sdk到最新版本,里面增加了一个功能,自动获取req_id,这个以前是需要用户在resp headers获取,现在在aos_status_t里面可以直接打印,方便定位问题

    -------------------------

    回 14楼(莫相离sky) 的帖子
    确认一下oss c sdk官网最新版本是否ok,如果能解决你们的问题建议还是用官方的sdk,现在你们自己改了,后面遇到问题就不好查了,统一用一个版本你们的维护代价也会小一点
    2015-09-01 13:28:50
    赞同 展开评论 打赏
  • Reoss如何修正上传本地时间不对,导致上传失败的问题
    人呢。。。。

    -------------------------

    回2楼yjseu的帖子
    时间不对 是可以校正,问题是我公司的 有些客户,电脑时间 他们有些故意 调成错的 。。。。。。。    所以才会有这个问题。。。。

    -------------------------

    回4楼yjseu的帖子
    其它原因,不是时区问题。    有可能就是他们整个公司的电脑的本地时间 都提前了 1个小时,2个小时之类的。OSS不是最多15分钟的时间差嘛,然后就导致传文件之类的 传不上去。  所以这边想要 外面把正确的时间传进来的。

    -------------------------

    回6楼yjseu的帖子
    我这边主程序,连接服务器的时候  回包里,有一个正确的时间返回,可以算出与本地的时间差值,后面得到正确的时间,也就是说启动的时候,程序可以得到正确的时间。  这样换环境也没有关系的。现在问题是怎么把这个时间传入。

    -------------------------

    回6楼yjseu的帖子
    求解答啊 ,求解答。

    -------------------------

    回9楼yjseu的帖子
    您好,我这边传入的时间代码是这样写的:
            time_t t;
        struct tm *q;
        t=1441951525;  /*+ 8 * 3600*/;
        q=gmtime(&t);
        char m[80];
        strftime(m, 80, "%Y-%m-%d %H:%M:%S::GMT", q);
        apr_table_set(headers,"x-oss-date",m);      //设置请求头
          设置时间区域 t是正确的时间   转GMT时间后传入。还是上传错误提示 日期格式定义错误。看了下OSS API文档中签名部分有关DATE的说明。感觉  没看懂啊  不是这样设置字段的么。。。。  真心求解答。

    -------------------------

    回9楼yjseu的帖子
    apr_table_set(headers,"x-oss-date", "Fri, 11 Sep 2015 06:41:01 GMT");      //设置请求头   现在这边这样设置请求头  也是错误的
    返回值 签名不匹配。

    -------------------------

    回9楼yjseu的帖子
    看起来时间是没有问题的。。。。

    -------------------------

    回13楼yjseu的帖子
    谢谢,这个问题 已经解决了,改了你们的SDK的代码。 有个地方  用curl库提交的时候,当自己指定了时间,Date域的字段就没有,导致的。你们新版的好像也修复了这个问题。
    2015-09-01 09:03:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载