2014年11月8日,又拍云不能上传了,麻的。

新手上路,请多包涵

以下是它的官方上传代码 ,我把帐号换成我的,麻的,还是不能上传。

最后的报错是:
401 Unauthorized
Sign error (sign = md5(METHOD&URI&DATE&CONTENT_LENGTH&MD5(PASSWORD))) , Date offset error!

它说是签名错误,但我仔细检查过,签名是绝对不会错的,完全根据其规则生成的,不可能有错。
以下是我使用的代码:诸位可以拷贝之,一试,告诉我是不是又拍云又出故障了。麻麻的。

public function official(){

    $bucketName   = '我的bucket,这里不能透露';
    $operatorName = '我的用户名,不透露';
    $operatorPwd  = '我的密码,不透露';

    //被上传的文件路径
    $filePath = '/opt/lampp/htdocs/campusupload/images/20141109111102720.jpg';
    $fileSize = filesize($filePath);
    //文件上传到服务器的服务端路径
    $serverPath = 'abroad/tt.jpg';
    $uri = "/$bucketName/$serverPath";


    //生成签名时间。得到的日期格式如:Thu, 11 Jul 2014 05:34:12 GMT
    $date = gmdate('D, d M Y H:i:s \G\M\T');
    $sign = md5("PUT&{$uri}&{$date}&{$fileSize}&".md5($operatorPwd));

    $ch = curl_init('http://v0.api.upyun.com' . $uri);

    $headers = array(
        "Expect:",
        "Date: ".$date, // header 中需要使用生成签名的时间
        "Authorization: UpYun $operatorName:".$sign
    );
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_PUT, true);

    $fh = fopen($filePath, 'rb');
    curl_setopt($ch, CURLOPT_INFILE, $fh);
    curl_setopt($ch, CURLOPT_INFILESIZE, $fileSize);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($ch);
    if(curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
        //"上传成功"

    } else {
        $errorMessage = sprintf("UPYUN API ERROR:%s", $result);
        echo $errorMessage;
    }
    curl_close($ch);
}
阅读 2.4k
2 个回答

看错误提示应该是服务器时间错误,检查下服务器时间是否正确。

新手上路,请多包涵

确实是服务器时间错误,thanks a lot.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
又拍云问答
子站问答
访问
宣传栏