開發準備
相關資源
cos java sdk v4 github 項目。
環境依賴
JDK 1.7(本版本 SDK 基於 JSON API 封裝組成)。
安裝 SDK
- maven 安裝。
pom.xml 添加依賴 - <dependency> <groupId>com.qcloud</groupId> <artifactId>cos_api</artifactId> <version>4.7</version> </dependency>
- 源碼安裝。
從 cos java sdk v4 github 下載源碼。
卸載SDK
刪除 pom 依賴或源碼。
歷史版本
4.2版本是針對 COS 4.X系統,接口與3.x的基本一致,如果需要使用歷史版本,請參見 cos java sdk v3 github。
生成客戶端對象
初始化密鑰信息
long appId = 1000000;
String secretId = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";
String secretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
// 設置要操作的bucket
String bucketName = "xxxxxxxxx";
// 初始化密鑰信息
Credentials cred = new Credentials(appId, secretId, secretKey);
初始化客戶端配置(如設置園區)
// 初始化客戶端配置
ClientConfig clientConfig = new ClientConfig();
// 設置bucket所在的區域,例如華南園區:gz; 華北園區:tj;華東園區:sh ;
clientConfig.setRegion("gz");
生成客戶端
// 初始化cosClient
COSClient cosClient = new COSClient(clientConfig, cred);
文件操作
上傳文件
方法原型
String uploadFile(UploadFileRequest request);
參數說明
參數名 |
類型 |
默認值 |
參數描述 |
request |
UploadFileRequest |
無 |
上傳文件類型請求 |
request成員 |
類型 |
默認值 |
設置方法 |
描述 |
bucketName |
String |
無 |
構造函數或 set 方法 |
bucket名稱 |
cosPath |
String |
無 |
構造函數或 set 方法 |
cos路徑, 必須從 bucket 下的根/開始,文件路徑不能以/結尾, 例如 /mytest/demo.txt |
localPath |
String |
無 |
構造函數或 set 方法 |
通過磁碟文件上傳的本地絕對路徑 |
contentBufer |
byte[] |
無 |
構造函數或 set 方法 |
通過內存上傳的 buffer 內容 |
bizAttr |
String |
空 |
構造函數或 set 方法 |
文件的備註,主要用於對該文件用途的描述 |
enableShaDigest |
boolean |
false |
set 方法 |
是否計算 sha 摘要,如果開啟 sha,並且 bucket 下有相同內容文件,則會觸發秒傳。sha 計算會耗費一定的 CPU 和時間,建議大文件不開啟 |
taskNum |
int |
16 |
set 方法 |
文件上傳的並發數 |
返回值
返回值類型 |
返回值描述 |
String |
{'code':$code, 'message':$mess, 'data':$data},code 為0表示成功,message 為 SUCCESS 或者失敗原因,data中包含相關的屬性,詳情請參見返回值模塊 |
示例
UploadFileRequest uploadFileRequest = new UploadFileRequest(bucketName, "/sample_file.txt", "local_file_1.txt");
String uploadFileRet = cosClient.uploadFile(uploadFileRequest);
下載文件
方法原型
String getFileLocal(GetFileLocalRequest request);
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
request |
GetFileLocalRequest |
無 |
下載文件請求 |
request 成員
request 成員 |
類型 |
默認值 |
設置方法 |
描述 |
bucketName |
String |
無 |
構造函數或 set 方法 |
bucket 名稱 |
cosPath |
String |
無 |
構造函數或 set 方法 |
cos 路徑,必須從 bucket 下的根/開始,文件路徑不能以/結尾,例如 /mytest/demo.txt |
localPath |
String |
無 |
構造函數或 set 方法 |
要下載到的本地路徑 |
useCDN |
boolean |
true |
set 方法 |
是否通過 CDN 進行下載 |
referer |
String |
空串 |
set 方法 |
設置 Referer(針對開啟了 refer 防盜鏈的 bucket) |
rangeStart |
long |
0 |
set 方法 |
要下載的字節起始,參見 HTTP Range |
rangeEnd |
long |
Long.MAX_VALUE |
set 方法 |
下載的字節結束,參見 HTTP Range |
示例
String localPathDown = "src/test/resources/local_file_down.txt";
GetFileLocalRequest getFileLocalRequest =
new GetFileLocalRequest(bucketName, cosFilePath, localPathDown);
getFileLocalRequest.setUseCDN(false);
getFileLocalRequest.setReferer("*.myweb.cn");
String getFileResult = cosClient.getFileLocal(getFileLocalRequest);
移動文件
方法原型
String moveFile(MoveFileRequest request);
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
request |
MoveFileRequest |
無 |
移動文件請求 |
request 成員
request成員 |
類型 |
默認值 |
設置方法 |
描述 |
bucketName |
String |
無 |
構造函數或set方法 |
bucket名稱 |
cosPath |
String |
無 |
構造函數或set方法 |
cos路徑,必須從bucket下的根/開始,文件路徑不能以/結尾, 例如 /mytest/demo.txt |
dstCosPath |
String |
無 |
構造函數或set方法 |
移動文件的目標地址,必須從bucket下的根/開始,文件路徑不能以/結尾,例如/mytest/demo.txt.move |
overWrite |
枚舉類型 |
NO_OVER_WRITE (不覆蓋) |
set 方法 setOverWrite |
在移動的目標文件存在時,選擇不覆蓋還是覆蓋,默認不覆蓋 |
示例
String cosFilePath = "/sample_file.txt";
String dstCosFilePath = "/sample_file.txt.bak";
MoveFileRequest moveRequest =
new MoveFileRequest(bucketName, cosFilePath, dstCosFilePath);
String moveFileResult = cosClient.moveFile(moveRequest);
獲取文件屬性
方法原型
String statFile(StatFileRequest request);
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
request |
StatFileRequest |
無 |
獲取文件屬性請求 |
request成員 |
類型 |
默認值 |
設置方法 |
描述 |
bucketName |
String |
無 |
構造函數或 set 方法 |
bucket 名稱 |
cosPath |
String |
無 |
構造函數或 set 方法 |
cos路徑,必須從 bucket 下的根/開始,文件路徑不能以/結尾,例如 /mytest/demo.txt |
返回值
返回值類型 |
返回值描述 |
String |
{'code':$code, 'message':$mess, 'data':$data},code 為0表示成功,message 為 SUCCESS 或者失敗原因,data 中包含相關的屬性,詳情請參見返回值模塊 |
示例
StatFileRequest statFileRequest = new StatFileRequest(bucketName, "/sample_file.txt");
String statFileRet = cosClient.statFile(statFileRequest);
更新文件屬性
方法原型
String updateFile(UpdateFileRequest request);
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
request |
UpdateFileRequest |
無 |
更新文件屬性請求 |
request 成員
request 成員 |
類型 |
默認值 |
設置方法 |
描述 |
bucketName |
String |
無 |
構造函數或 set 方法 |
bucket 名稱 |
cosPath |
String |
無 |
構造函數或 set 方法 |
cos 路徑, 必須從 bucket 下的根/開始,文件路徑不能以/結尾,例如 /mytest/demo.txt |
bizAttr |
String |
無 |
set 方法 |
文件的備註,主要用於對改文件用途的描述 |
authority |
String (枚舉) |
無 |
set 方法 |
文件權限,默認是繼承 bucket 的權限合法取值: eInvalid(繼承bucket),eWRPrivate(私有讀寫), eWPrivateRPublic(私有寫, 公有讀) |
cacheControl |
String |
無 |
set 方法 |
參見 HTTP 的 Cache-Control |
contentType |
String |
無 |
set 方法 |
參見 HTTP 的 Content-Type |
contentLanguage |
String |
無 |
set 方法 |
參見 HTTP 的 Content-Language |
contentDisposition |
String |
無 |
set 方法 |
參見 HTTP 的 Content-Disposition |
x-cos-meta- |
String |
無 |
set 方法 |
自定義 HTTP 頭,參數必須以 x-cos-meta-開頭,值由用戶定義,可設置多個 |
tips: 更新屬性可以選擇其中的某幾個,對於HTTP頭部cache_control,content_type, content_disposition 和 x-cos-meta-,如果本次只更新其中的某幾個,其他的都會被抹掉,即這4個屬性是整體更新。
返回值
返回值類型 |
返回值描述 |
String |
{'code':$code, 'message':$mess},code為0表示成功,message 為 SUCCESS 或者失敗原因,詳情請參見返回值模塊 |
示例
UpdateFileRequest updateFileRequest = new UpdateFileRequest(bucketName, "/sample_file.txt");
updateFileRequest.setBizAttr("測試目錄");
updateFileRequest.setAuthority(FileAuthority.WPRIVATE);
updateFileRequest.setCacheControl("no cache");
updateFileRequest.setContentDisposition("cos_sample.txt");
updateFileRequest.setContentLanguage("english");
updateFileRequest.setContentType("application/json");
updateFileRequest.setXCosMeta("x-cos-meta-xxx", "xxx");
updateFileRequest.setXCosMeta("x-cos-meta-yyy", "yyy");
String updateFileRet = cosClient.updateFile(updateFileRequest);
刪除文件
方法原型
String delFile(DelFileRequest request);
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
request |
DelFileRequest |
無 |
刪除文件請求 |
request 成員
request 成員 |
類型 |
默認值 |
設置方法 |
描述 |
bucketName |
String |
無 |
構造函數或 set 方法 |
bucket 名稱 |
cosPath |
String |
無 |
構造函數或 set 方法 |
cos 路徑, 必須從 bucket 下的根/開始,文件路徑不能以/結尾, 例如/mytest/demo.txt |
返回值
返回值類型 |
返回值描述 |
String |
{'code':$code, 'message':$mess}, code 為0表示成功,message 為 SUCCESS 或者失敗原因,詳情請參見返回值模塊 |
示例
DelFileRequest delFileRequest = new DelFileRequest(bucketName, "/sample_file_move.txt");
String delFileRet = cosClient.delFile(delFileRequest);
目錄操作
創建目錄
方法原型
String createFolder(CreateFolderRequest request);
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
request |
CreateFolderRequest |
無 |
創建目錄請求 |
request 成員
request 成員 |
類型 |
默認值 |
設置方法 |
描述 |
bucketName |
String |
無 |
構造函數或 set 方法 |
bucket 名稱 |
cosPath |
String |
無 |
構造函數或 set 方法 |
cos路徑,必須從 bucket 下的根/開始,目錄路徑必須以/結尾, 例如 /mytest/dir/ |
bizAttr |
String |
空 |
set方法 |
目錄的備註,主要用於對目錄用途的描述 |
返回值
返回值類型 |
返回值描述 |
String |
{'code':$code, 'message':$mess},code 為0表示成功,message 為 SUCCESS 或者失敗原因,詳情請參見返回值模塊 |
示例
CreateFolderRequest createFolderRequest = new CreateFolderRequest(bucketName, "/sample_folder/");
String createFolderRet = cosClient.createFolder(createFolderRequest);
獲取目錄屬性
方法原型
String statFolder(StatFolderRequest request);
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
request |
StatFolderRequest |
無 |
獲取目錄屬性請求 |
request 成員
request 成員 |
類型 |
默認值 |
設置方法 |
描述 |
bucketName |
String |
無 |
構造函數或set方法 |
bucket名稱 |
cosPath |
String |
無 |
構造函數或set方法 |
cos路徑,必須從 bucket 下的根/開始,目錄路徑必須以/結尾,例如 /mytest/dir/ |
返回值
返回值類型 |
返回值描述 |
String |
{'code':$code, 'message':$mess, 'data':$data},code 為0表示成功,message 為 SUCCESS 或者失敗原因,data 中包含相關的屬性,詳情請參見返回值模塊 |
示例
StatFolderRequest statFolderRequest = new StatFolderRequest(bucketName, "/sample_folder/");
String statFolderRet = cosClient.statFolder(statFolderRequest);
更新目錄屬性
方法原型
String updateFolder(UpdateFolderRequest request);
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
request |
UpdateFolderRequest |
無 |
更新目錄屬性請求 |
request 成員
request 成員 |
類型 |
默認值 |
設置方法 |
描述 |
bucketName |
String |
無 |
構造函數或 set 方法 |
bucket 名稱 |
cosPath |
String |
無 |
構造函數或 set 方法 |
cos路徑,必須從 bucket 下的根/開始,目錄路徑必須以/結尾, 例如 /mytest/dir/ |
bizAttr |
String |
空 |
set 方法 |
目錄的備註,主要用於對目錄用途的描述 |
返回值
返回值類型 |
返回值描述 |
String |
{'code':$code, 'message':$mess},code 為0表示成功,message 為 SUCCESS 或者失敗原因,詳情請參見返回值模塊 |
示例
UpdateFolderRequest updateFolderRequest = new UpdateFolderRequest(bucketName, "/sample_folder/");
updateFolderRequest.setBizAttr("這是一個測試目錄");
String updateFolderRet = cosClient.updateFolder(updateFolderRequest);
獲取目錄列表
方法原型
String listFolder(ListFolderRequest request);
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
request |
ListFolderRequest |
無 |
獲取目錄成員請求 |
request 成員
request 成員 |
類型 |
默認值 |
設置方法 |
描述 |
bucketName |
String |
無 |
構造函數或 set 方法 |
bucket 名稱 |
cosPath |
String |
無 |
構造函數或 set 方法 |
cos 路徑, 必須從 bucket 下的根/開始,目錄路徑必須以/結尾, 例如 /mytest/dir/ |
num |
int |
199 |
構造函數或 set 方法 |
獲取列表成員的數量,最大為199 |
prefix |
String |
空 |
構造函數或 set 方法 |
搜索成員的前綴, 例如 prefix 為 test 表示只搜索以 test 開頭的文件或目錄 |
context |
String |
空 |
構造函數或 set 方法 |
搜索上下文, 由上一次 list 的結果返回,作為這一次搜索的起點,用於循環獲取一個目錄下的所有成員 |
返回值
返回值類型 |
返回值描述 |
String |
{'code':$code, 'message':$mess, 'data':$data},code 為0表示成功,message 為 SUCCESS 或者失敗原因,data 中包含成員列表,詳情請參見返回值模塊 |
示例
ListFolderRequest listFolderRequest = new ListFolderRequest(bucketName, "/sample_folder/");
String listFolderRet = cosClient.listFolder(listFolderRequest);
刪除目錄
方法原型
String delFolder(DelFolderRequest request);
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
request |
DelFolderRequest |
無 |
刪除目錄請求 |
request成員 |
類型 |
默認值 |
設置方法 |
描述 |
bucketName |
String |
無 |
構造函數或 set 方法 |
bucket 名稱 |
cosPath |
String |
無 |
構造函數或 set 方法 |
cos 路徑, 必須從 bucket 下的根/開始,目錄路徑必須以/結尾, 例如 /mytest/dir/ |
返回值
返回值類型 |
返回值描述 |
String |
{'code':$code, 'message':$mess},code為 0 表示成功, message 為 SUCCESS 或者失敗原因,詳情請參見返回值模塊 |
示例
DelFolderRequest delFolderRequest = new DelFolderRequest(bucketName, "/sample_folder/");
String delFolderRet = cosClient.delFolder(delFolderRequest);
簽名管理
簽名模塊提供了生成多次簽名、單次簽名和下載簽名的接口,其中多次簽名和單次簽名在文件和目錄操作的api內部使用,用戶不用關心,下載簽名用於方便用戶生成下載私有 bucket 的文件簽名。
多次簽名
String getPeriodEffectiveSign(String bucketName, String cosPath, Credentials cred, long expired)
使用場景
上傳文件,重命名文件,創建目錄,獲取文件目錄屬性,拉取目錄列表。
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
bucket |
String |
無 |
bucket 名稱 |
cos_path |
String |
無 |
要簽名的 cos 路徑 |
cred |
Credentials |
無 |
用戶身份信息,包括 appid,secretId,secretkey |
expired |
long |
無 |
簽名過期時間,UNIX時間戳 |
返回值
base64 編碼的字符串。
示例
Credentials cred = new Credentials(appId, secretId, secretKey);
long expired = System.currentTimeMillis() / 1000 + 600;
String signStr = Sign.getPeriodEffectiveSign(bucketName, "/pic/test.jpg", cred, expired);
單次簽名
String getOneEffectiveSign(String bucketName, String cosPath, Credentials cred)
使用場景
刪除和更新文件目錄。
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
bucket |
unicode |
無 |
bucket名稱 |
cos_path |
unicode |
無 |
要簽名的cos路徑 |
cred |
Credentials |
無 |
用戶身份信息,包括 appid,secretId,secretkey |
返回值
base64 編碼的字符串。
示例
Credentials cred = new Credentials(appId, secretId, secretKey);
String signStr = Sign.getOneEffectiveSign(bucketName, "/pic/test.jpg", cred);
下載簽名
String getDownLoadSign(String bucketName, String cosPath, Credentials cred, long expired)
使用場景
生成文件的下載簽名,用於下載私有 bucket 的文件。
參數說明
參數名 |
參數類型 |
默認值 |
參數描述 |
bucket |
unicode |
無 |
bucket 名稱 |
cos_path |
unicode |
無 |
要簽名的 cos 路徑 |
cred |
Credentials |
無 |
用戶身份信息,包括 APPID,SecretId,Secretkey |
expired |
long |
無 |
簽名過期時間, UNIX 時間戳 |
返回值
base64 編碼的字符串。
示例
Credentials cred = new Credentials(appId, secretId, secretKey);
long expired = System.currentTimeMillis() / 1000 + 600;
String signStr = Sign.getDownLoadSign(bucketName, "/pic/test.jpg", cred, expired);
返回值
code |
含義 |
0 |
操作成功 |
-1 |
輸入參數錯誤,例如輸入的本地文件路徑不存在,cos 文件路徑不符合規範 |
-2 |
網絡錯誤,例如404等 |
-3 |
連接 cos 時發生異常,如連接超時 |
小夥伴們有興趣想了解內容和更多相關學習資料的請點讚收藏+評論轉發+關注我,後面會有很多乾貨。我有一些面試題、架構、設計類資料可以說是程式設計師面試必備!
所有資料都整理到網盤了,需要的話歡迎下載!私信我回復【111】即可免費獲取
出處:https://cloud.tencent.com/document/product/436/6273