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

原文地址:http://www.2cto.com/kf/201305/215351.html


这几天很有兴致的学习了百度云盘文件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怎么用百度给了一个很好的演示平台:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值