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

来源:互联网 发布:max485 3.3v单片机 编辑:程序博客网 时间:2024/06/01 10:50

前话: 最近比较闲,用过百度/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];    }}


原创粉丝点击