使用百度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]; } }
相关文章推荐
- JAVA中使用FTPClient实现文件上传下载
- java文件的上传与下载原理(使用Servlet)
- java下操作ftp 上传下载创建文件夹
- JAVA中使用FTPClient上传下载
- JAVA中使用FTPClient实现文件上传下载
- JAVA中使用FTPClient上传下载
- java操作ftp 上传下载创建文件夹(转+扩展)
- JAVA中使用FTPClient上传下载
- JAVA中使用FTPClient上传下载
- Java:使用HttpClient进行POST和GET请求以及文件上传和下载
- 使用JAVA读取ORACLE BLOB字段实现上传下载
- 使用httpclient实现上传下载(javaWeb系统数据传输http实现)
- 百度UEditor的介绍和图片上传的使用(java)
- JAVA中使用FTPClient上传下载
- 使用java操作FastDFS上传,下载,删除文件
- [置顶] FTP上传下载使用java(JSch技术)
- Java使用SFTP连接服务器上传、下载文件
- Java实现FTP文件与文件夹的上传和下载
- 用户使用七牛(java-sdk或者其他)上传的response打印不出信息。
- 如何在Linux中使用sFTP上传或下载文件与文件夹