开发者社区> 问答> 正文

js上传图片到oss,怎么获取返回值

// 基本信息
                $id= "111";
                $key= "222";
                $host = "333";

                // 根据当前时间获取结束时间,格式2016-07-13T16:30:51Z
                $now = time();
                $expire = 30;
                $end = $now + $expire;
                $expiration = date("Y-m-d{1}H:i:s{2}", $end);
                $expiration = str_ireplace("{1}", "T", $expiration);
                $expiration = str_ireplace("{2}", "Z", $expiration);
                // 用户上传的目录
                $dir = "sunac/upload/";

                // 最大文件大小.用户可以自己设置
                $conditions[] = [0 => 'content-length-range', 1 => 0, 2 => 20971520];
                // 表示用户上传的数据,必须是以$dir开始, 不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录
                $conditions[] = [0 => 'starts-with', 1 => '$key', 2 => $dir];
                // 参数列表
                $param = ['expiration' => $expiration, 'conditions' => $conditions];

                // 签名加密
                $policy = json_encode($param);
                $base64_policy = base64_encode($policy);
                $string_to_sign = $base64_policy;
                $signature = base64_encode(hash_hmac('sha1', $string_to_sign, $key, true));

                // 返回数据
                $this->ajaxReturn([
                    "accessid"  => $id,
                    "host"      => $host,
                    "policy"    => $base64_policy,
                    "signature" => $signature,
                    "expire"    => $end,
                    "dir"       => $dir,
                ]);


   上面的是PHP代码(密钥什么的我删了),用户在前台选择好文件后,通过AJAX获取签名什么的,这都成功了,没问题




   下面的是前台代码
var request = new FormData();
                    request.append('OSSAccessKeyId', res.accessid);
                    request.append('policy', res.policy);
                    request.append('Signature', res.signature);
                    request.append('key', "sunac/upload/" + ~new Date());
                    request.append('file', file);
                    var xhr = new XMLHttpRequest();

                    sunac.upload("http://" + res.host, request, function(res){
                        console.log(res);
                    });


   sunac.upload 这个函数的代码是


   var xhr = new XMLHttpRequest();
        xhr.open("post", url, true);
        // xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
        xhr.onreadystatechange = function(){
            callback(xhr.responseText);
        xhr.send(form);




   重点来了,文件能上传成功,但是xhr.responseText 返回的都是空的,0字节






    求解决方式。

   我希望在提交图片后,阿里云能返回给我文件宽高这种信息,json或xml的都行


展开
收起
福利活动 2016-07-13 18:14:28 11571 0
1 条回答
写回答
取消 提交回答
  • Rejs上传图片到oss,怎么获取返回值
    楼主的问题解决了吗, 今天碰到相同的问题, 返回的reponseText 是空的
    2018-02-26 22:43:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript函数 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载