目录

1、获取code

2、获取access_token

3、获取网盘容量

4、获取文件列表

5、预上传

6、分片上传

7、创建文件


1、获取code

    public function getCode(Request $request){$config = ['client_id' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX','redirect_uri' => '你的回调地址','state' => md5(uniqid())];$url = 'https://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id='. $config['client_id'].'&redirect_uri='. $config['redirect_uri'].'&scope=netdisk&display=mobile&qrcode=1&force_login=0&device_id=&state='.$config['state'];//生成二维码图片$qrcode = QrCode::encoding('UTF-8')->size(300)->generate($url);$this->success('OK', ['qrcode' => base64_encode($qrcode),'url' => $url]);}

2、获取access_token

 public function getAuth(Request $request){$code = $request->input('code', '');if(empty($code)){exit();}$config = ['client_id' => 'XXXXXXXXXXXXXXXXXXXXXXXX','SecretKey' => 'XXXXXXXXXXXXXXXXXXXXXXXX','redirect_uri' => '回调地址',];$url = 'https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code='.$code.'&client_id='.$config['client_id'].'&client_secret='.$config['SecretKey'].'&redirect_uri=' . $config['redirect_uri'].'&state=get_list';$result = $this->curl_get($url);$access_token = json_decode($result,true);}

3、获取网盘容量

    public function getQuota(){$url = 'https://pan.baidu.com/api/quota?access_token='.$this->config['access_token'].'&checkfree=1&checkexpire=1';$result = Http::withOptions(['verify' => false])->get($url);$res = $result->body();$res = \GuzzleHttp\json_decode($res);if($res->errno === 0){$this->success('OK',['total' => $res->total / 1024 / 1024 / 1024 . 'GB','free' => $res->free / 1024 / 1024 / 1024 . 'GB','used' => $res->used / 1024 / 1024 / 1024 . 'GB','remain' => ($res->total - $res->used) / 1024 / 1024 / 1024 . 'GB','expire' => $res->expire,]);}$this->error($this->msg[$res->errno]);}

4、获取文件列表

public function getList($page){$start = ($page - 1) * 10;$data = ['method' => 'list','dir' => '/','access_token' => $this->config['access_token'],'order' => 'time','web' => 1,];$total = \GuzzleHttp\json_decode(Http::withOptions(['verify' => false])->get($this->api.http_build_query($data))->body());$data['start'] = $start;$data['limit'] = 10;$result = Http::withOptions(['verify' => false])->get($this->api.http_build_query($data));$res = $result->body();$res = \GuzzleHttp\json_decode($res);if($res->errno === 0){$list = [];if(count($res->list) > 0){foreach($res->list as $key => $item){$list[] = ['id' => $key + 1,'name' => $item->server_filename,'create_time' => date('Y-m-d H:i:s', $item->server_ctime),'size' => $item->isdir === 1 ? '文件夹' : $item->size / 1024 / 1024 / 1024];}}$this->success('OK',['list' => $list,'total' => count($total->list) ?? 0]);}$this->error($this->msg[$res->errno]);}

5、预上传

public function precreate(){$url = $this->api . 'method=precreate&access_token=' . $this->config['access_token'];$data = ['path' => urlencode('/apps/XXXXXX/index.txt'),'size' => filesize(base_path().'/public/index.txt'),'isdir' => 0,'autoinit' => 1,'block_list' => \GuzzleHttp\json_encode([md5('index.php')])];$result = Http::asForm()->withOptions(['verify' => false])->post($url, $data);$res = $result->body();$res = \GuzzleHttp\json_decode($res);print_r($res);if($res->errno === 0){$res = $this->upload($res->uploadid, $res->path, $res->block_list);}$this->error($this->msg[$res->errno]);}

6、分片上传

private function upload($uploadid, $path, $block_list){$url = 'https://d.pcs.baidu.com/rest/2.0/pcs/superfile2?';$data = ['method' => 'upload','access_token' => $this->config['access_token'],'type' => 'tmpfile','path' => $path,'uploadid' => $uploadid,'partseq' => 0];$url .= http_build_query($data);$result = Http::attach('robots', base_path().'/public/index.txt')->withOptions(['verify' => false])->post($url, ['file' => base_path().'\public\index.php']);$res = $result->body();$res = \GuzzleHttp\json_decode($res);if($res->md5){$this->create($path, $uploadid, $res->md5);}}

7、创建文件

private function create($path, $uploadid, $md5){$url = $this->api. 'method=create&access_token=' . $this->config['access_token'];$data = ['path' => '/apps/xxxxxx/index.txt','size' => filesize(base_path().'/public/index.txt'),'isdir' => '0','rtype' => 1,'block_list' => \GuzzleHttp\json_encode([$md5]),'uploadid' => $uploadid,'mode' => 3];$result = Http::withOptions(['verify' => false])->post($url, $data);$res = $result->body();$res = \GuzzleHttp\json_decode($res);if($res->errno === 0){}}

我目前卡在了这里,创建文件,返回

stdClass Object
([errno] => 2[path] => [request_id] => 254240173748038691
)

查阅了很多资料和大佬的文章,都没对这个有个明确的说法!

PS:这个问题,在今天突然解决了,这个block_list参数,在文档中虽然写这不是必须,但是实际上却是必须传的,其实和第一个预创建的格式和数据是一样的。

private function create($path, $uploadid, $md5){$url = $this->api. 'method=create&access_token=' . $this->config['access_token'];$data = ['path' => $path,'size' => filesize(base_path().'/public/index.zip'),'isdir' => 0,'rtype' => 1,'block_list' => \GuzzleHttp\json_encode([$md5]),'uploadid' => $uploadid,'mode' => 3];$result = Http::asForm()->withOptions(['verify' => false])->post($url, $data);$res = $result->body();$res = \GuzzleHttp\json_decode($res);if($res->errno === 0){}}

百度网盘开放平台接口,上传、下载等功能PHP详细操作相关推荐

  1. python调用百度网盘开放平台接口上传本地文件

    本文章是为如何在没有GUI的环境下,使用指令行上传文件到百度网盘提供一个思路,其他操作请自行查询官方文档拓展. 前期工作 申请成为开发者 创建应用 记录AppKey和SecreKey,后续开发需要使用 ...

  2. 调用百度网盘开放平台接口,操作百度网盘中的文件,上传、下载等

    1.文件管理 post 文件操作:copy, mover, rename, delete https://pan.baidu.com/rest/2.0/xpan/file? method=filema ...

  3. python 调取百度网盘API,实现上传下载

    向AI转型的程序员都关注了这个号

  4. 百度网盘开放平台接入(Python)

    百度网盘开放平台接入(Python) 百度网盘开放平台接入链接:https://pan.baidu.com/union/doc/nksg0sbfs 接入流程 1.请在官网首页右上角找到登录入口,使用百 ...

  5. php对接百度网盘开发平台API开发高级实战案例解析:(环境部署、php封装类、Access Token获取、预上传、分片上传)

    文章目录 前言 一.环境部署 1.封装BdPan类库 2.回调地址配置 二.获取授权码Code 1.手动获取Code 2.生成本地token 3.读取AccessToken凭证 4.爬虫函数 二.简化 ...

  6. [转]仿163网盘无刷新文件上传系统

    原文链接:http://www.cnblogs.com/cloudgamer/archive/2008/10/20/1314766.html 这个仿163网盘无刷新文件上传系统,并没有用使用.net的 ...

  7. 百度网盘资源怎么分享群链接下载?

    百度网盘是很多小伙伴都在使用的一款云存储软件,功能丰富且齐全,用户经常都会在这里分享交流文件资源,那要怎么在百度网盘分享群链接下载呢?下面小编就给大家带来详细的教程. 百度网盘资源怎么分享群链接下载? ...

  8. android ftp同步程序,ftp同步 安卓,安卓手机ftp上传下载文件功能同步视频照片

    手机拍照越来方便,手机里的照片也越积越多,手机运行缓慢,本文利用安卓的每步FTP服务APP来自动实现手机视频照片的同步,释放手机被占用的存储空间.在机顶盒上运行每步FTP服务,机顶盒USB口连接U盘做 ...

  9. linux下备份mysql上传到网盘_Linux命令行上传文件到百度网盘

    最近在学习 MySQL 的 bin-log 时候考虑到数据备份的问题,突然想到如果能将数据通过 Linux 命令行方式备份到百度网盘,那是一件多么牛逼的事情.百度网盘有免费的 2TB 存储空间,而且有 ...

最新文章

  1. GDCM:gdcm::Parser的测试程序
  2. 高德sdk_联手HERE,高德进军地图海外市场 | CES 2020
  3. linux查找文件名赋值给变量,Linux平台从文件中查找字符赋值于变量
  4. 一篇文章带你快速理解微服务架构,由浅入深带你走进微服务架构的核心
  5. hdu 1285 确定比赛名次
  6. oralce 创建用户和权限
  7. 转:从框架看PHP的五种境界及各自的薪资待遇(仅限于二三线城市,一线除外)...
  8. win7网上邻居_CentOS7 Linux访问Win7的共享文件夹
  9. ABR与ASBR是什么?区别又是什么?
  10. c语言射击类打飞机小游戏感悟
  11. win7计算机高级设置在哪,windows7投屏设置在哪里
  12. 华为人报:实事求是科研方向与20年艰苦努力
  13. 前端 原型对象中this的认识
  14. Primo.Ramdisk.Srv.Mui.Setup安装配置教程
  15. 2019年市面上360全景相机大比拼 Insta360 Pro 2,得图Detu F4 Plus,理光Theta SC,GoPro Fusion,Nikon尼康KeyMission 360
  16. 清华非全日制计算机硕士,2021年清华大学硕士招生分析,专硕非全日制占比高达67%...
  17. Mac电脑安装其他系统
  18. 叙述计算机的主要应用领域并各举实例说明,《大学计算机基础》习题集.DOC
  19. Angr Manual
  20. 时间复杂度 P/NP/NPC

热门文章

  1. 从零入门云计算(1):云计算究竟是个啥?
  2. feedback算法C语言,Learner Reviews Feedback for 计算导论与C语言基础 Course | Coursera
  3. python实现飞机大战游戏
  4. 计算机配置高低怎么看,电脑配置高低怎么判断_教你查看电脑配置高低的方法...
  5. 推荐一个rss源搜索引擎
  6. 纳豆红曲的功效与作用是什么?
  7. RSR系列路由器密码恢复
  8. 文件储存树的理解(ISAM 和 B+Tree)
  9. 一起做激光SLAM[六]isam于SLAM位姿因子图优化的使用
  10. 国企银行面试 信息科技岗研发岗面试经验