今天的項目需要用騰訊雲來做雲存儲服務,剛開始一頭霧水,後來看了Java的API文檔和SDK文檔才慢慢有個瞭解,這次作下記錄,方便以後查看。
本地環境依賴
SDK 支持 JDK 1.7, 1.8 及以上版本。
安裝 SDK(maven 安裝)
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.4.6</version>
</dependency>
註冊好騰訊雲賬號,在騰訊雲上覆制這四個在代碼裏替換即可,ACCESSKEY,SECRETKEY,APPID,REGIONID
創建存儲桶
上傳上來的文件
初始化密鑰信息
private static final String ACCESSKEY = "XXXXXX";
private static final String SECRETKEY = "XXXXXX";
private static final String BUCKETNAME = "XXXXXX-12517827811";
private static final String APPID = "12517827811 ";
private static final String REGIONID = "ap-guangzhou";
private static final String KEY="MyFile1/zookeeper-3.4.8.tar.gz";
private static final String KEY01="MyFile1/1.jpg";
初始化客戶端
// 1 初始化用戶身份信息(secretId, secretKey)
COSCredentials cred = new BasicCOSCredentials(ACCESSKEY, SECRETKEY);
// 2 設置bucket的區域, COS地域的簡稱請參照 https://cloud.tencent.com/document/product/436/6224
// clientConfig中包含了設置region, https(默認http), 超時, 代理等set方法, 使用可參見源碼或者接口文檔FAQ中說明
ClientConfig clientConfig = new ClientConfig(new Region(REGIONID));
// 3 生成cos客戶端
COSClient cosClient = new COSClient(cred, clientConfig);
Java代碼(在main函數裏可以測試,不過都被我註釋掉了)
/**
* @Author: SunJunxian
* @Date: 2018/12/17
* @Description: java實現騰訊雲存儲服務(COSClient)
* @REGIONID 區域
* @KEY 上傳上雲之後的名字
* @KEY01 需要刪除的文件
*/
public class CosClientTest {
private static final String ACCESSKEY = "XXXXXX";
private static final String SECRETKEY = "XXXXXX";
private static final String BUCKETNAME = "XXXXXX-12517827811";
private static final String APPID = "12517827811";
private static final String REGIONID = "ap-guangzhou";
private static final String KEY="MyFile1/zookeeper-3.4.8.tar.gz";
private static final String KEY01="MyFile1/1.jpg";
/**
* 初始化CosClient相關配置, appid、accessKey、secretKey、region
* @return
*/
public static COSClient getCosClient() {
// 1 初始化用戶身份信息(secretId, secretKey)
COSCredentials cred = new BasicCOSCredentials(ACCESSKEY, SECRETKEY);
// 2 設置bucket的區域, COS地域的簡稱請參照 https://cloud.tencent.com/document/product/436/6224
// clientConfig中包含了設置region, https(默認http), 超時, 代理等set方法, 使用可參見源碼或者接口文檔FAQ中說明
ClientConfig clientConfig = new ClientConfig(new Region(REGIONID));
// 3 生成cos客戶端
COSClient cosClient = new COSClient(cred, clientConfig);
// bucket的命名規則爲{name}-{appid} ,此處填寫的存儲桶名稱必須爲此格式
//String bucketName = BUCKETNAME;
return cosClient;
}
/**
* 上傳文件
* @return
* //絕對路徑和相對路徑都OK
*/
public static String uploadFile() {
// File localFile = new File("E:\\software\\JavaProject\\demo\\demo20\\src\\main\\resources\\1.jpg");
File localFile = new File("E:\\software\\zookeeper-3.4.8.tar.gz");
PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKETNAME, KEY, localFile);
// 設置存儲類型, 默認是標準(Standard), 低頻(standard_ia),一般爲標準的
putObjectRequest.setStorageClass(StorageClass.Standard);
COSClient cc = getCosClient();
try {
PutObjectResult putObjectResult = cc.putObject(putObjectRequest);
// putobjectResult會返回文件的etag
String etag = putObjectResult.getETag();
System.out.println(etag);
} catch (CosServiceException e) {
e.printStackTrace();
} catch (CosClientException e) {
e.printStackTrace();
}
// 關閉客戶端
cc.shutdown();
return null;
}
/**
* 下載文件
* @param bucketName
* @param key
* @return
*/
public static String downLoadFile(String bucketName, String key) {
File downFile = new File("E:\\software\\1.jpg");
COSClient cc = getCosClient();
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
ObjectMetadata downObjectMeta = cc.getObject(getObjectRequest, downFile);
cc.shutdown();
String etag = downObjectMeta.getETag();
return etag;
}
/**
* 刪除文件
* @param bucketName
* @param key
*/
public static void deleteFile(String bucketName, String key) {
COSClient cc = getCosClient();
try {
cc.deleteObject(bucketName, key);
} catch (CosClientException e) {
e.printStackTrace();
} finally {
cc.shutdown();
}
}
/**
* 創建桶
* @param bucketName
* @return
* @throws CosClientException
* @throws CosServiceException
*/
public static Bucket createBucket(String bucketName) throws CosClientException, CosServiceException {
COSClient cc = getCosClient();
Bucket bucket = null;
try {
bucket = cc.createBucket(bucketName);
} catch (CosClientException e) {
e.printStackTrace();
} finally {
}
return bucket;
};
/**
* 刪除桶
* @param bucketName
* @throws CosClientException
* @throws CosServiceException
*/
public void deleteBucket(String bucketName) throws CosClientException, CosServiceException {
COSClient cc = getCosClient();
try {
cc.deleteBucket(bucketName);
} catch (CosClientException e) {
e.printStackTrace();
} finally {
}
};
/**
* 判斷桶是否存在
* @param bucketName
* @return
* @throws CosClientException
* @throws CosServiceException
*/
public static boolean doesBucketExist(String bucketName) throws CosClientException, CosServiceException {
COSClient cc = getCosClient();
boolean bucketExistFlag = cc.doesBucketExist(bucketName);
return bucketExistFlag;
};
/**
* 查看桶文件
* @param bucketName
* @return
* @throws CosClientException
* @throws CosServiceException
*/
public static ObjectListing listObjects(String bucketName) throws CosClientException, CosServiceException {
COSClient cc = getCosClient();
// 獲取 bucket 下成員(設置 delimiter)
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
listObjectsRequest.setBucketName(bucketName);
// 設置 list 的 prefix, 表示 list 出來的文件 key 都是以這個 prefix 開始
listObjectsRequest.setPrefix("");
// 設置 delimiter 爲/, 即獲取的是直接成員,不包含目錄下的遞歸子成員
listObjectsRequest.setDelimiter("/");
// 設置 marker, (marker 由上一次 list 獲取到, 或者第一次 list marker 爲空)
listObjectsRequest.setMarker("");
// 設置最多 list 100 個成員,(如果不設置, 默認爲 1000 個,最大允許一次 list 1000 個 key)
listObjectsRequest.setMaxKeys(100);
ObjectListing objectListing = cc.listObjects(listObjectsRequest);
// 獲取下次 list 的 marker
String nextMarker = objectListing.getNextMarker();
// 判斷是否已經 list 完, 如果 list 結束, 則 isTruncated 爲 false, 否則爲 true
boolean isTruncated = objectListing.isTruncated();
List<COSObjectSummary> objectSummaries = objectListing.getObjectSummaries();
for (COSObjectSummary cosObjectSummary : objectSummaries) {
// get file path
String key = cosObjectSummary.getKey();
// get file length
long fileSize = cosObjectSummary.getSize();
// get file etag
String eTag = cosObjectSummary.getETag();
// get last modify time
Date lastModified = cosObjectSummary.getLastModified();
// get file save type
String StorageClassStr = cosObjectSummary.getStorageClass();
}
return objectListing;
}
/**
*查詢一個 Bucket 所在的 Region。
* @param bucketName
* @return
* @throws CosClientException
* @throws CosServiceException
*/
public static String getBucketLocation(String bucketName) throws CosClientException , CosServiceException{
COSClient cosClient = getCosClient();
// bucket 的命名規則爲{name}-{appid} ,此處填寫的存儲桶名稱必須爲此格式
String location = cosClient.getBucketLocation(bucketName);
return location;
}
public static void main(String[] args) {
// uploadFile();
// downLoadFile(BUCKETNAME , KEY);
// deleteFile(BUCKETNAME , KEY01);
// createBucket("sunjunxian01-1251782781");
//deleteBucket();
// doesBucketExist("sunjunxian01-1251782781");
// System.out.println(listObjects(BUCKETNAME));
//System.out.println("BUCKETNAME的位置:" + getBucketLocation(BUCKETNAME));
}
}