您的位置:首页 > 编程语言 > Java开发

使用百度BCS-Java-SDK文件夹上传及下载

2013-10-22 15:57 344 查看
前话: 最近比较闲,用过百度/google/360/金山的云盘,想自己开发程序使用云盘API来上传和下载文件,之前了解过百度云存储API,一直没有试验过,所以今天试了一下,空间好像是1TB,确实蛮大的,样例中循环上传文件进行测试,才写不到1GB。360还像也有了云API;百度除了BCS还有PCS,应该取代BCS,明天可以试一下。不过BCS SDK很不专业,比起JDK规范性上差多了。

package com.test;

import java.io.File;

import com.baidu.inf.iis.bcs.BaiduBCS;
import com.baidu.inf.iis.bcs.auth.BCSCredentials;
import com.baidu.inf.iis.bcs.model.ObjectListing;
import com.baidu.inf.iis.bcs.model.ObjectMetadata;
import com.baidu.inf.iis.bcs.model.ObjectSummary;
import com.baidu.inf.iis.bcs.request.GetObjectRequest;
import com.baidu.inf.iis.bcs.request.ListObjectRequest;
import com.baidu.inf.iis.bcs.request.PutObjectRequest;
import com.baidu.inf.iis.bcs.response.BaiduBCSResponse;

public class Main
{
/**
* 百度云存储APP服务器,固定字段
*/
static String host = "bcs.duapp.com";

/**
* 开发者自己建立的存储池
*/
static String bucket = "kitphoto";

/**
* 将该文件夹下文件上传到百度云存储上
*/
static String inputFileDir = "C:\\photo\\input\\";

/**
* 从百度云存储池下载文件到该目录下
*/
static String outputFileDir = "C:\\photo\\output\\";

/**
* @param args
*/
public static void main(String[] args){
// access 和secret key申请参考http://developer.baidu.com/wiki/index.php?title=docs/cplat/stor/guide
BCSCredentials credentials = new BCSCredentials("your access key",
"your secret key");
BaiduBCS baiduBCS = new BaiduBCS(credentials, host);
baiduBCS.setDefaultEncoding("UTF-8"); // Default UTF-8

clearBucket(baiduBCS, bucket);
putFilesByDir(baiduBCS, inputFileDir, "/input/");
//getFilesByDir(baiduBCS, outputFileDir, "/input/");

}

/* 测试使用 */
static int count = 0;

/**
* 将单个文件上传到BCS上
* @param baiduBCS
* @param file :待上传的文件对象
* @param dir : 文件在BCS上的路径
*/
private static void putObjectByFile(BaiduBCS baiduBCS, File file, String dir)
{
count++;
PutObjectRequest request = new PutObjectRequest(bucket, dir + "t" + count + file.getName(), file);
ObjectMetadata metadata = new ObjectMetadata();
// metadata.setContentType("text/html");
request.setMetadata(metadata);
BaiduBCSResponse<ObjectMetadata> response = baiduBCS.putObject(request);
ObjectMetadata objectMetadata = response.getResult();
System.out.println("Upload file :" + file.getName());
}

/**
* 清空BCS上bucket,遍历bucket下的内容,逐个删除
* @param baiduBCS
* @param bucket
*/
private static void clearBucket(BaiduBCS baiduBCS, String bucket)
{
/* 有内容时不允许删除bucket */
//        baiduBCS.deleteBucket(bucket);
//        CreateBucketRequest request = new CreateBucketRequest(bucket);
//        baiduBCS.createBucket(request);

/* 获取存储池内容逐项删除 */
ListObjectRequest listObjectRequest = new ListObjectRequest(bucket);
BaiduBCSResponse<ObjectListing> response = baiduBCS.listObject(listObjectRequest);
for (ObjectSummary os : response.getResult().getObjectSummaries())
{
System.out.println("Delete: bucket = " + bucket + "file = " + os.toString());
baiduBCS.deleteObject(bucket, os.getName());
}
}

/**
* 获取BCS上制定目录下的所有文件,下载到本地
* @param baiduBCS
* @param localDir :指定将文件保存到本地的路径
* @param serverDir: BCS服务器上文件路径
*/
private static void getFilesByDir(BaiduBCS baiduBCS, String localDir, String serverDir)
{
ListObjectRequest listObjectRequest = new ListObjectRequest(bucket);
listObjectRequest.setStart(0);
listObjectRequest.setLimit(20);
listObjectRequest.setPrefix(serverDir);

// ------------------by dir
{
// prefix must start with '/' and end with '/'
// listObjectRequest.setPrefix("/1/");
// listObjectRequest.setListModel(2);
}
// ------------------only object
{
// prefix must start with '/'
// listObjectRequest.setPrefix("/1/");
}
BaiduBCSResponse<ObjectListing> response = baiduBCS.listObject(listObjectRequest);
//log.info("we get [" + response.getResult().getObjectSummaries().size() + "] object record.");
for (ObjectSummary os : response.getResult().getObjectSummaries()) {
System.out.println("Download : " + os.toString());

GetObjectRequest getObjectRequest = new GetObjectRequest(bucket, os.getName());
File file = new File(localDir + getFileName(os.getName()));
baiduBCS.getObject(getObjectRequest, file);
}
}

/**
* 将本地路径下的文件上传到BCS服务器上,过滤本地隐藏文件
* @param baiduBCS
* @param localDir
* @param serverDir
*/
private static void putFilesByDir(BaiduBCS baiduBCS, String localDir, String serverDir)
{
File file = new File(localDir);
int count = 1;

if(!file.isDirectory())
{
putObjectByFile(baiduBCS, file, serverDir);
}
else
{
while(count < 100000)  /* 这层循环仅用于测试BCS存储池最大可存储多少数据 */
{
String[] list = file.list();
for(int i = 0; i < list.length; i++)
{
File subFile = new File(localDir + "\\" + list[i]);

/* 过滤隐藏文件 */
if(subFile.isHidden())
{
continue;
}
putObjectByFile(baiduBCS, subFile, serverDir);
}

count++;
}
}
}

private static String getFileName(String fullName)
{
String[] strs = fullName.split("/");
return strs[strs.length - 1];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: