项目中用到又拍云文件存储,找了一遍没找到关于又拍云上传的方法,只能自己造了
首先我封装到一个文件了
(function($, request, upyun){
upyun.bucket = '您的服务名称'
upyun.upload = function (path, success, fail) {
var self = this
success = success || mui.noop
fail = fail || mui.noop
var name = path.substr(path.lastIndexOf('/') + 1)
this.getSignature({name: name}, function(err, res){
if (err) {
fail && fail(err)
return
}
var task = plus.uploader.createUpload(
'https://v0.api.upyun.com/'+ self.bucket,
{method:'POST'},
function ( t, status ) {
if ( status == 200 ) {
var data = JSON.parse(t.responseText)
if(data.code == 200){
success(data)
}else{
fail(data.message)
}
} else {
fail({err:status,message:'上传文件出错'+ JSON.stringify(t)})
}
})
task.addFile(path, {key:"file"})
task.addData("authorization", res.signature || '')
task.addData("policy", res.policy || '')
task.start()
})
}
upyun.getSignature = function (data, cb) {
request.post(api.upsign, data).then(function(data){
cb(null, data)
}).catch(function(err){
cb(err)
})
}
})(mui, request, window.upyun={})
后端采用php签名
$key = 'upyun.operator‘;
$secret = md5('upyun.password');
$method = "POST";
$uri = "/".‘upyun.bucket';
$date = gmdate('D, d M Y H:i:s \G\M\T');
$name = $_POST['name'];
$ext = substr($name, strrpos($name, '.') + 1);
$name =str_replace('.','', microtime(true)).".".$ext;
$path = '/test/'.$name; //远程文件路径
$policy = base64_encode(json_encode([
'save-key' => $path,
'bucket' => 'upyun.bucket',
'expiration' => time() + 3600,
'date' => gmdate('D, d M Y H:i:s \G\M\T')
]));
$elems = array();
foreach (array($method, $uri, $date, $policy) as $v)
{
if ($v)
{
$elems[] = $v;
}
}
$value = implode('&', $elems);
$sign = base64_encode(hash_hmac('sha1', $value, $secret, true));
$sign = 'UPYUN ' . $key . ':' . $sign;
$data = ['policy' => $policy, 'signature' => $sign];
echo json_encode($data);
使用方法很简单
upyun.upload(path, function(data){
console.log(JSON.stringify(data))
},function(err){
console.log(JSON.stringify(err))
})
0 个评论
要回复文章请先登录或注册