// 基本信息
$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的都行
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。