用php模拟请求阿里云盘实现文件上传并获取外链
前言写了个【阿里云盘】模拟上传并获取直链的demo:https://tu.zhuolin.wang/dirve/index原理阿里云盘登录后会拿到一个access_token,这个access_token可以携带上实现各种操作:获取文件列表、信息等等。步骤携带token给file/create发送一个创建文件的请求,拿到阿里oss的临时上传链接将文件上传到自己的服务器,再用php发送PUT请求给阿
·
前言
写了个【阿里云盘】模拟上传并获取直链的demo:https://tu.zhuolin.wang/dirve/index
原理
阿里云盘登录后会拿到一个access_token,这个access_token可以携带上实现各种操作:获取文件列表、信息等等。
步骤
- 携带
token给file/create发送一个创建文件的请求,拿到阿里oss的临时上传链接 - 将文件上传到自己的服务器,再用php发送
PUT请求给阿里oss(阿里oss上传有Referrer判断,所以需要用curl伪造一下来源) - 上传文件后拿到响应头Etag字段,携带
etag、upload_id、file_id请求complete接口(应该是判断oss是否有相关文件,关联到云盘用户下的) - 最后调用
file/get接口获取文件信息,里面的url字段就是外链地址了
代码
php实现PUT请求传文件
/**
* test 使用方法
*/
function test(){
$url = "https://bj29.cn-beijing.data.alicloudccp.com/xxxxxx?Expires=1606892085&OSSAccessKeyId=xxxxxxxxxxxxxx&partNumber=1&uploadId=xxxxxxxxxxxxxx";
$sourceFileDir = "/public/upload/alitmp/1.png";
$sourceFile = fopen($sourceFileDir,"rb");
$headerArr = array(
'Referer:https://www.aliyundrive.com/',
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
);
$bkJson = $this->curlPut($url, $sourceFile, $headerArr);
}
/**
* PUTurl
*/
function curlPut($url, $sourceFile, $headerArr = array(), $timeout = 30){
$ch = curl_init(); //初始化curl
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返回字符串,而不直接输出
curl_setopt($ch, CURLOPT_URL, $url); //设置put到的url
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArr);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_HEADER, 1); // 启用时会将头文件的信息作为数据流输出。
// curl_setopt($ch, CURLOPT_NOBODY, true);// 是否不需要响应的正文,为了节省带宽及时间,在只需要响应头的情况下可以不要正文
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); //设置请求方式
curl_setopt($ch, CURLOPT_PUT, true); //设置为PUT请求
curl_setopt($ch, CURLOPT_INFILE, $sourceFile); //设置资源句柄
// curl_setopt($ch, CURLOPT_INFILESIZE, filesize($sourceFileDir));//文件大小,可以不要
$response = curl_exec($ch);
if ($error = curl_error($ch)){
$bkArr = array(
'code' => 0,
'msg' => $error,
);
}
else{
$bkArr = array(
'code' => 1,
'msg' => 'ok',
'data' => $response
);
}
curl_close($ch); // 关闭 cURL 释放资源
return $bkArr;
}
总结
目前阿里云盘是采用阿里oss存储,STS进行临时授权用户上传。
感觉整个阿里云盘就是一个大的bucket.
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)