当前位置:Gxlcms > mysql > Baidu云盘【文件API】接口学习『一』

Baidu云盘【文件API】接口学习『一』

时间:2021-07-01 10:21:17 帮助过:88人阅读

这几天很有兴致的 学习 了百度云盘 文件 API 接口 的使用;初步是想做一个在线android应用,应用中的文档是存放在百度云盘的。 主要是分一下几个步骤: 1.注册百度账号 2.登录百度开发者中心 3.创建移动应用,获取对应的(API Key Secret Key) 4.开通pcs AP

这几天很有兴致的学习了百度云盘文件API接口的使用;初步是想做一个在线android应用,应用中的文档是存放在百度云盘的。

主要是分一下几个步骤:

1.注册百度账号

2.登录百度开发者中心

3.创建移动应用,获取对应的(API Key Secret Key)

4.开通pcs API权限

5.获取ACCESS_token(认证编码)

6.开发应用


注意:

开通移动应用,获取key

获取token的时候我使用的安卓获取的方式

\


通过我写对应api的例子我发现,其实就两种情况:一种是get方式提交数据,另外一种是post方式提交数据

1.get方式提交数据,我们用获取云盘的信息为例:

获取云盘信息前我们要知道,我们要准备好什么数据:

请求参数:

url: 标明我们要访问的网址路径 值固定问“https://pcs.baidu.com/rest/2.0/pcs/quota”

method:标明我们是请求云盘信息 值固定为“info”

acceess_token:准入标识 值是我们自己申请的

接收返回参数:

quota:云盘总容量

used:云盘使用容量

request_id:该请求的表示,没啥用

返回的一个json串如下格式:{"quota":123794882560, "used":83573494688,"request_id":2853739529}


我在做的时候你使用Gson工具将json串转换到对应的entity类中了 代码如下:


[html] /**
* @param URLConnection conn通过get方式获取StringBuffer
* @return
*/
private StringBuffer getJsonString(URLConnection conn) {
InputStreamReader isr = null;
BufferedReader br = null;
StringBuffer sb = null;
try {
isr = new InputStreamReader(conn.getInputStream(),"gb2312");
br = new BufferedReader(isr);
String line = null;
sb = new StringBuffer();
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append("\r\n");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(isr!=null)
isr.close();
} catch (IOException e) {
System.out.println("流关闭是异常");
e.printStackTrace();
}
}

return sb;
}

/**
* @return
* @throws Exception
* 获取云空间的信息
*/
public CloudInfo getCloudInfo() throws Exception {
URL u = new URL(https://pcs.baidu.com/rest/2.0/pcs/quota"?method=info&access_token=你申请的token的值";
URLConnection conn = u.openConnection();// 打开网页链接
// 获取用户云盘信息
String cloudJson = this.getJsonString(conn).toString();

// 解析成对象 下面有这个实体对象的类
Gson gson = new Gson();
CloudInfo cloudInfo = gson.fromJson(cloudJson, CloudInfo.class);
System.out.println("云盘信息:"+cloudInfo);
return cloudInfo;
}

/**
* @param URLConnection conn通过get方式获取StringBuffer
* @return
*/
private StringBuffer getJsonString(URLConnection conn) {
InputStreamReader isr = null;
BufferedReader br = null;
StringBuffer sb = null;
try {
isr = new InputStreamReader(conn.getInputStream(),"gb2312");
br = new BufferedReader(isr);
String line = null;
sb = new StringBuffer();
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append("\r\n");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(isr!=null)
isr.close();
} catch (IOException e) {
System.out.println("流关闭是异常");
e.printStackTrace();
}
}

return sb;
}

/**
* @return
* @throws Exception
* 获取云空间的信息
*/
public CloudInfo getCloudInfo() throws Exception {
URL u = new URL(https://pcs.baidu.com/rest/2.0/pcs/quota"?method=info&access_token=你申请的token的值";
URLConnection conn = u.openConnection();// 打开网页链接
// 获取用户云盘信息
String cloudJson = this.getJsonString(conn).toString();

// 解析成对象 下面有这个实体对象的类
Gson gson = new Gson();
CloudInfo cloudInfo = gson.fromJson(cloudJson, CloudInfo.class);
System.out.println("云盘信息:"+cloudInfo);
return cloudInfo;
}
[html] package com.entity;

import java.lang.reflect.Type;

/**
* @author ydcun 获取云空间的信息 例如:
* {"quota":123794882560, 空间配额,单位为字节
* "used":83573494688, 已使用空间大小 单位为字节。
* "request_id":2853739529}
*/
public class CloudInfo{
private Double quota;
private Double used;
private Double request_id;
/**
* @return the quota 空间配额,单位为字节
*/
public Double getQuota() {
return quota;
}
/**
* @param quota the quota to set 空间配额,单位为字节
*/
public void setQuota(Double quota) {
this.quota = quota;
}
/**
* @return the used 已使用空间大小 单位为字节
*/
public Double getused() {
return used;
}
/**
* @param used the used to set 已使用空间大小 单位为字节
*/
public void setused(Double used) {
this.used = used;
}
/**
* @return the request_id
*/
public Double getRequest_id() {
return request_id;
}
/**
* @param request_id the request_id to set
*/
public void setRequest_id(Double request_id) {
this.request_id = request_id;
}
@Override
public String toString() {

return new StringBuffer().append("空间容量:").append(this.getQuota()/1024/1024).append("M; 已用:").append(this.getused()/1024/1024).append("M; ").toString();
}
}

package com.entity;

import java.lang.reflect.Type;

/**
* @author ydcun 获取云空间的信息 例如:
* {"quota":123794882560, 空间配额,单位为字节
* "used":83573494688, 已使用空间大小 单位为字节。
* "request_id":2853739529}
*/
public class CloudInfo{
private Double quota;
private Double used;
private Double request_id;
/**
* @return the quota 空间配额,单位为字节
*/
public Double getQuota() {
return quota;
}
/**
* @param quota the quota to set 空间配额,单位为字节
*/
public void setQuota(Double quota) {
this.quota = quota;
}
/**
* @return the used 已使用空间大小 单位为字节
*/
public Double getused() {
return used;
}
/**
* @param used the used to set 已使用空间大小 单位为字节
*/
public void setused(Double used) {
this.used = used;
}
/**
* @return the request_id
*/
public Double getRequest_id() {
return request_id;
}
/**
* @param request_id the request_id to set
*/
public void setRequest_id(Double request_id) {
this.request_id = request_id;
}
@Override
public String toString() {

return new StringBuffer().append("空间容量:").append(this.getQuota()/1024/1024).append("M; 已用:").append(this.getused()/1024/1024).append("M; ").toString();
}
}

2.通过post方式提交 我用上传单个文件为例子:

同样我们也先了解下上传文件要参数设置:


请求参数:

url: 标明我们要访问的网址路径 值固定问“https://pcs.baidu.com/rest/2.0/pcs/file”

method:标明我们是请求云盘信息 值固定为“upload”

acceess_token:准入标识 值是我们自己申请的

path:是我们要上传到云盘的那个路径下 如/apps/myBaiduCloud/ myBaiduCloud是我们的应用名称(当你获取koten后就会自动生成以你应用名称为名的文件夹)

file:这个就是我们要上传的文件了(要求用post方式上传)

ondup:可选参数,标识当有重名的文件的时候处理方式具体见api

接收返回参数:

返回的也是json串,

path:为我们上传的文件保存的全路径

size:文件的大小有多少字节

ctime/mtime:文件的创建修改时间

其他参数介绍点小标题去api中查看

{
  "path" : "/apps/album/README.md"
  "size" : 372121,
  "ctime" : 1234567890,
  "mtime" : 1234567890,
  "md5" : "cb123afcc12453543ef",
  "fs_id" : 12345,
 "request_id":4043312669
}

我在做的时候也是将其封装到实体类中了,这里和上面一样不详述,我们重点看下提交文件是怎么提交的代码如下:


[java] /**
* @param path 云盘存放路径
* @param name 要上传的文件
* @return
* @throws Exception
*/
public FileBase uploadFile(String path,File file) throws Exception{
//模拟文件
String fileName="README.md";
file = new File(fileName);
path="%2fapps%2fmybaidu%2f"; // 我用的是url编码过源码为:-> "/apps/mybaidu/
/"


//将需要url传值的参数和url组装起来
String u ="https://pcs.baidu.com/rest/2.0/pcs/file?path="+path+file.getName()+"&method=upload&access_token=你自己申请的token值";



PostMethod filePost = new PostMethod(u);
//post提交的参数
Part[] parts = {new FilePart(fileName,file)};
//设置多媒体参数,作用类似form表单中的enctype="multipart/form-data"
filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
HttpClient clients = new HttpClient();
//响应代码
int status = clients.executeMethod(filePost);
System.out.println("成功上传"+path+fileName);

BufferedReader buReader = new BufferedReader(new InputStreamReader(filePost.getResponseBodyAsStream(),"utf-8"));
StringBuffer sb = new StringBuffer();
String line;
while((line=buReader.readLine())!=null){
sb.append(line);
}
buReader.close();

// 解析成对象
Gson gson = new Gson();
FileBase cloudInfo = gson.fromJson(sb.toString(), FileBase.class);

return cloudInfo;
}

/**
* @param path 云盘存放路径
* @param name 要上传的文件
* @return
* @throws Exception
*/
public FileBase uploadFile(String path,File file) throws Exception{
//模拟文件
String fileName="README.md";
file = new File(fileName);
path="%2fapps%2fmybaidu%2f"; // 我用的是url编码过源码为:-> "/apps/mybaidu/
/"


//将需要url传值的参数和url组装起来
String u ="https://pcs.baidu.com/rest/2.0/pcs/file?path="+path+file.getName()+"&method=upload&access_token=你自己申请的token值";



PostMethod filePost = new PostMethod(u);
//post提交的参数
Part[] parts = {new FilePart(fileName,file)};
//设置多媒体参数,作用类似form表单中的enctype="multipart/form-data"
filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
HttpClient clients = new HttpClient();
//响应代码
int status = clients.executeMethod(filePost);
System.out.println("成功上传"+path+fileName);

BufferedReader buReader = new BufferedReader(new InputStreamReader(filePost.getResponseBodyAsStream(),"utf-8"));
StringBuffer sb = new StringBuffer();
String line;
while((line=buReader.readLine())!=null){
sb.append(line);
}
buReader.close();

// 解析成对象
Gson gson = new Gson();
FileBase cloudInfo = gson.fromJson(sb.toString(), FileBase.class);

return cloudInfo;
}
上面代码成功后我们就会在/apps/mybaidu/目录下找到README.md文件

上面代码执行还要倒入对应的jar包:下载

commons-codec-1.3.jar
commons-httpclient-3.0.jar
commons-logging.jar
gson-2.2.1.jar
jsoup-1.6.3.jar

\

其他的api怎么用百度给了一个很好的演示平台:

人气教程排行