研究了下文檔,學會的先記錄下。
首先新建工具類COSUtil。
配置賬號密碼、存儲桶以生成客戶端(每個方法下都需要配置,為了代碼簡潔后面的方法會省略):
1 String secretId = "root"; //初始化用戶身份信息(secretId, secretKey)。
2 String secretKey = "123456;
3 String bucketName = "test-1250000000"; //初始化存儲桶
4
5 COSCredentials cred = new BasicCOSCredentials(secretId, secretKey); 6 Region region = new Region("ap-shanghai"); //設置 bucket 的區域, COS 地域的簡稱請參照 https://cloud.tencent.com/document/product/436/6224 7 ClientConfig clientConfig = new ClientConfig(region); //clientConfig 中包含了設置 region, https(默認 http), 超時, 代理等 set 方法, 使用可參見源碼或者常見問題 Java SDK 部分。 8 COSClient cosClient = new COSClient(cred, clientConfig); //生成 cos 客戶端。
文件上傳:
public static String upload(File file) { if(file==null){ //判斷文件是否為空 return null; } try { // 指定要上傳到 COS 上對象鍵,對象鍵其實就是該文件存儲在騰訊雲的文件路徑和文件名,如:"file/test.log"。 String key = "file/test.log"; System.out.println(key); PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file); PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); return key; //String etag = putObjectResult.getETag(); // 獲取文件的 etag } catch (CosServiceException serverException) { serverException.printStackTrace(); } catch (CosClientException clientException) { clientException.printStackTrace(); } return ""; }
文件下載(流):
//傳入key以獲取文件下載流
public static COSObjectInputStream download(String key){ GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);//根據桶和key獲取文件請求 System.out.println("文件請求:"+getObjectRequest); COSObject cosObject = cosClient.getObject(getObjectRequest); COSObjectInputStream cosObjectInput = cosObject.getObjectContent(); System.out.println("輸出流:"+cosObjectInput); return cosObjectInput; }
文件下載(實體):
//根據key下載文件實體 public static ObjectMetadata download1(String key){
File downFile = new File("d:/1111.pdf"); //自定義下載文件路徑或直接填key GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key); ObjectMetadata downObjectMeta = cosClient.getObject(getObjectRequest, downFile); //返回文件的屬性 ObjectMetadata,包含文件的自定義頭和 content-type 等屬性。 return downObjectMeta; }
獲取文件臨時url:
public static String generatePresignedUrl(String key){ //若要用此url查看在線文件,key必須以".png",".pdf"等后綴結尾 2020-01-04 12:02:47
Date expirationTime = new Date(System.currentTimeMillis() + 30L * 60L * 1000L); //半小時后過期
System.out.println("expiratioin"+expirationTime.toString()); URL url = cosClient.generatePresignedUrl(bucketName, key, expirationTime); //獲取url地址 System.out.println(url); return url.toString(); }
在控制台打印文件信息(以下代碼打印了全部):
public static void showAllFile(){
// Bucket的命名格式為 BucketName-APPID ,此處填寫的存儲桶名稱必須為此格式
//String bucketName = "examplebucket-1250000000";
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(); // 設置bucket名稱 listObjectsRequest.setBucketName(bucketName); // prefix表示列出的object的key以prefix開始 listObjectsRequest.setPrefix(""); // deliter表示分隔符, 設置為/表示列出當前目錄下的object, 設置為空表示列出所有的object listObjectsRequest.setDelimiter(""); // 設置最大遍歷出多少個對象, 一次listobject最大支持1000 listObjectsRequest.setMaxKeys(1000); ObjectListing objectListing = null; do { try { objectListing = cosClient.listObjects(listObjectsRequest); } catch (CosServiceException e) { e.printStackTrace(); return; } catch (CosClientException e) { e.printStackTrace(); return; } // common prefix表示表示被delimiter截斷的路徑, 如delimter設置為/, common prefix則表示所有子目錄的路徑 List<String> commonPrefixs = objectListing.getCommonPrefixes(); // object summary表示所有列出的object列表 List<COSObjectSummary> cosObjectSummaries = objectListing.getObjectSummaries(); for (COSObjectSummary cosObjectSummary : cosObjectSummaries) { // 文件的路徑key String key = cosObjectSummary.getKey(); // 文件的etag String etag = cosObjectSummary.getETag(); // 文件的長度 long fileSize = cosObjectSummary.getSize(); // 文件的存儲類型 String storageClasses = cosObjectSummary.getStorageClass();
System.out.println("路徑與文件名:"+key); System.out.println("etag:"+etag); System.out.println("文件大小:"+fileSize); System.out.println("類型:"+storageClasses); System.out.println(); } String nextMarker = objectListing.getNextMarker(); listObjectsRequest.setMarker(nextMarker); } while (objectListing.isTruncated()); }
刪除文件(單個):
//刪除文件
public static void deleteObject(String key){
cosClient.deleteObject(bucketName, key);
}
刪除文件(批量):
/**
* 刪除文件(批量)
* @param keyList //要刪除文件的key表
*/
public static void deleteObjects(List<DeleteObjectsRequest.KeyVersion> keyList){
keyList.add(new KeyVersion("project/folder1/picture.jpg"));
keyList.add(new KeyVersion("project/folder2/text.txt"));
keyList.add(new KeyVersion("project/folder2/music.mp3"));
DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName); deleteObjectsRequest.setKeys(keyList); // 批量刪除文件 try { DeleteObjectsResult deleteObjectsResult = cosclient.deleteObjects(deleteObjectsRequest); List<DeleteObjectsResult.DeletedObject> deleteObjectResultArray = deleteObjectsResult.getDeletedObjects(); } catch (MultiObjectDeleteException mde) { // 如果部分刪除成功部分失敗, 返回MultiObjectDeleteException List<DeleteObjectsResult.DeletedObject> deleteObjects = mde.getDeletedObjects(); List<MultiObjectDeleteException.DeleteError> deleteErrors = mde.getErrors(); } catch (CosServiceException e) { // 如果是其他錯誤,例如參數錯誤, 身份驗證不過等會拋出 CosServiceException e.printStackTrace(); } catch (CosClientException e) { // 如果是客戶端錯誤,例如連接不上COS e.printStackTrace(); } }
暫時就先寫這點了。2019-12-24 15:51:41