接入指南
SDK名稱 | 網盤與相簿服務 Android SDK |
開發人員 | 阿里雲計算有限公司 |
SDK版本 | 0.1.4 |
SDK包名 | com.aliyun.pds.sdk |
SDK更新時間 | 2023.07.19 |
SDK大小 | 159.76 KB |
SDK MD5值 | 47643c218b682f5c59ac2f17bb9044b4 |
隱私政策 | |
SDK下載 |
接入 SDK
通過gradle引入SDK。
implementation 'com.aliyun.pds:android-sdk:0.1.4'源碼地址 aliyun-pds-android-sdk。
重要
支援的Android SDK最低版本為API 21
初始化
在使用SDK之前,請確保您已經開通PDS服務,並且在控制台建立了執行個體,參見開始使用 PDS。
// 這個通用流程是你們登入自己的帳號系統後擷取,後端使用 PDS 平台申請的 appKey & appSecret 換取 token 返回給用戶端
val token = SDToken("you access token")
// 請在PDS控制台擷取您的 api host
val apiHost = "you api host"
val config = SDConfig.Builder(token, apiHost, 3600)
// 是否支援妙傳,預設true (選填)
.canFastUpload()
// 請求的ua (選填)
.userAgent()
// 最大重試次數,預設3 (選填)
.maxRetryCount()
// 是否開啟偵錯模式,預設false (選填)
.isDebug()
// 下載分區大小,預設10M,不要填過小或者過大(選填)
.downloadBlockSize()
// 上傳分區大小,預設4M,不要填過小或者過大(選填)
.uploadBlockSize()
// 建立網路連接逾時設定,預設15s (選填)
.connectTimeout()
// 網路連接響應逾時設定,預設60s (選填)
.readTimeout()
// 網路傳輸響應逾時設定,預設60s (選填)
.writeTimeout()
.build()
SDClient.instance.init(this, config)說明
需要注意的是,當前 SDK 不負責重新整理 accessToken。需要使用方從自己的伺服器定時重新整理token後傳遞給SDK,使用如下代碼更新token。
SDClient.instance.updateToken(token)
上傳下載使用
說明
請注意任務的進度和狀態回調都在子線程中,若要更新UI,請自行切換到主線程。
下載任務
// 初始化下載資訊
val downloadInfo = DownloadRequestInfo.Builder()
.downloadUrl(url)
.driveId(driveId)
.fileId(fileId)
.fileName(fileName)
.fileSize(fileSize)
// 檔案儲存路徑
.filePath(dir.path)
// 檔案來自分享:id(不涉及分享業務可不傳)
.shareId(shareId)
// 檔案來自分享:token(不涉及分享業務可不傳)
.shareToken(shareToken)
// 檔案來自分享:pwd(不涉及分享業務可不傳)
.sharePwd(sharePwd)
// 歷史版本相關:id(下載檔案的歷史版本時,需要傳入,不涉及可不傳)
.revisionId(revisionId)
// hash 效驗值
.contentHash(hash)
// hash 效驗演算法名,當前只支援 crc64
.contentHashName("crc64")
.build()
/*
* 建立任務並啟動任務
* 如果將taskId指定為之前未完成的任務則會根據之前的進度進行斷點續傳
* 不要將taskId指定為之前已經成功的任務,這樣會直接觸發完成回調
* 不同的任務需要指定不同的TaskId,只有在續傳情境才能指定為之前的taskId
*/
val task = SDClient.instance.startDownloadTask(
taskId,
downloadInfo,
// 下載完成監聽(成功,失敗都會回調。失敗時會返回錯誤資訊)
completeListener,
// 下載進度監聽
progressListener
)
/*
* 預設startDownloadTask即會啟動任務,
* 任務被stop後需要再次啟動可以調用此方法繼續運行
*/
task.start()
/*
* 停止任務,clean參數false代表不清理臨時檔案,繼續start會斷點續傳,
* 參數為true則代表會清理臨時檔案及資料,再次start會重頭進行任務
*/
task.stop(clean)
上傳任務
// 初始化上傳資訊
val uploadInfo = UploadRequestInfo.Builder()
.fileName("edmDrive")
.filePath(file.absolutePath)
.fileSize(file.length())
.parentId(parentId)
.driveId(driveId)
.mimeType(mimeType)
// 指定檔案ID,需要覆蓋上傳時必填
.fileId(fileId)
/*
* 同名檔案處理模式,預設為"auto_rename",具體參數說明如下:
* auto_rename: 當發現同名檔案是,雲端自動重新命名,預設為追加目前時間點,如 xxx _20060102_150405;
* ignore: 允許同名檔案;
* refuse:當雲端存在同名檔案時,拒絕建立新檔案,直接提示上傳成功
*/
.checkNameMode(checkNameMode)
// 分享相關, 不涉及可以不傳
.shareId(shareId)
.shareToken(shareToken)
.sharePwd(sharePwd)
.build()
// 建立任務並啟動
val task = SDClient.instance.startUploadTask(
taskId,
uploadInfo,
// 上傳完成監聽(成功,失敗都會回調。失敗時會返回錯誤資訊)
completeListener,
// 上傳進度監聽
progressListener
)
/*
* 預設startUploadTask即會啟動任務,
* 任務被stop後需要再次啟動可以調用此方法繼續運行
*/
task.start()
/*
* 停止任務,clean參數false代表不清理臨時檔案,繼續start會斷點續傳,
* 參數為true則代表會清理臨時檔案及資料,再次start會重頭進行任務
*/
task.stop(clean)任務進度回調
// currentSize 為當前的進度,注意回調不在主線程
interface OnProgressListener {
fun onProgressChange(currentSize : Long)
}任務結束回調
interface OnCompleteListener {
fun onComplete(taskId: String, fileMeta : SDFileMeta, errorInfo: SDErrorInfo?)
}其中fileMeta 為檔案相關資訊
class SDFileMeta(
// 檔案id
val fileId: String?,
// 檔案名稱
val fileName: String?,
// 檔案路徑,上傳任務為要上傳檔案的路徑,下載任務為檔案儲存路徑
val filePath: String?,
// 上傳任務的 uploadId,不涉及相關業務可以忽略
val uploadId: String? = ""
)
class SDErrorInfo(
// 相關錯誤碼
val code: SDTransferError,
// 錯誤描述
val message: String,
// 異常,用於查看堆棧, 以及錯誤處理
val exception: Exception?,
// 如果是後端請求相關錯誤,則會有該值用於和後端排查問題
var requestId: String? = ""
)錯誤碼說明
SDTransferError.Unknown // 未知錯誤
SDTransferError.Network // 網路錯誤
SDTransferError.Server // 伺服器錯誤
SDTransferError.FileNotExist // 上傳時,本地檔案沒有找到
SDTransferError.SpaceNotEnough // 下載時,本地空間不足
SDTransferError.TmpFileNotExist // 下載時,本地臨時檔案不存在
SDTransferError.PathRuleError // 下載時,儲存路徑規則錯誤建立任務後任務自動啟動,可以通過進度回調得知當前任務進度,任務成功或失敗則會調用完成監聽
檔案API操作
具體請求參數和傳回值參考官方 API 文檔 檔案管理。
通過 SDClient.fileApi 拿到 fileApi 對象後調用如下方法訪問對應 API。
說明
註:請求樣本中的參數僅為基礎參數,其它參數請參考官方API文檔。
列舉檔案或檔案夾
fun fileList(fileListRequest: FileListRequest): FileListResp?
// FileListRequest 其他參數參考 FileListRequest 實現
val request = FileListRequest()
// 所擷取檔案夾的fileId(root為根目錄)
request.parentId = "root"
// 列表所屬的 driveId
request.driveId = "" 建立檔案、檔案夾
// FileCreateRequest樣本
val createRequest = FileCreateRequest()
// enum (ignore, auto_rename, refuse)
createRequest.checkNameMode = "auto_rename"
// 指定建立的檔案在哪個 driveId
createRequest.driveId = ""
// 建立檔案的名稱
createRequest.name = ""
// 檔案的父目錄fileId(root為根目錄)
createRequest.parentFileId = "root"
// enum (file, folder)
createRequest.type = "folder" 擷取檔案、檔案夾
// 擷取檔案、檔案夾資訊
fun fileGet(getResp: FileGetRequest): FileGetResp?
// FileGetRequest樣本
val getRequest = FileGetRequest()
// 檔案所屬的 driveId
getRequest.driveId = ""
// 檔案的fileId
getRequest.fileId = "" 拷貝檔案、檔案夾
// 拷貝檔案、檔案夾
fun fileCopy(fileCopyRequest: FileCopyRequest): FileCopyResp?
// FileCopyRequest樣本
val copyRequest = FileCopyRequest()
// 檔案的所屬的 driveId
copyRequest.driveId = ""
// 檔案的fileId
copyRequest.fileId = ""
// 目標檔案夾的driveId
copyRequest.toDriveId = ""
// 檔案拷貝後的新名字
copyRequest.newName = ""
// 目標檔案夾的fufileId(root為根目錄)
copyRequest.toParentId = "root" 移動檔案、檔案夾
// 移動檔案、檔案夾
fun fileMove(fileMoveRequest: FileMoveRequest): FileMoveResp?
// FileMoveRequest樣本
val moveRequest = FileMoveRequest()
// 檔案的driveId
moveRequest.driveId = ""
// 檔案的fileId
moveRequest.fileId = ""
// 目標檔案夾的driveId
moveRequest.toDriveId = ""
// 檔案移動後的新名字
moveRequest.newName = ""
// 目標檔案夾的父目錄fileId(root為根目錄)
moveRequest.toParentId = "root" 更新檔案、檔案夾
fun fileUpdate(updateRequest: FileUpdateRequest): FileGetResp?
// FileUpdateRequest樣本
val updateRequest = FileUpdateRequest()
// 檔案所屬的 driveId
updateRequest.driveId = item.driveId!!
// 檔案的fileId
updateRequest.fileId = item.fileId
// 檔案更新後的新名字
updateRequest.name = "" 刪除檔案、檔案夾
fun fileDelete(deleteRequest: FileDeleteRequest): FileDeleteResp?
// FileDeleteRequest樣本
val delRequest = FileDeleteRequest()
// 檔案所屬的driverId
delRequest.driveId = ""
// 需要刪除檔案或檔案夾的fileId
delRequest.fileId = "" 搜尋檔案
fun fileSearch(fileSearchRequest: FileSearchRequest): FileListResp?
// FileSearchRequest樣本
// query規則可參考 https://www.alibabacloud.com/help/document_detail/175890.html
val request = FileSearchRequest()
// keyStr:搜尋關鍵詞
request.query = "name match '$keyStr' and status = 'available'"
request.driveId = "" 其他
// 擷取檔案分區的上傳地址
fun fileGetUploadUrl(getUploadUrlRequest: FileGetUploadUrlRequest): FileGetUploadUrlResp?
// 完成檔案上傳
fun fileComplete(completeRequest: FileCompleteRequest): FileGetResp?
// 擷取檔案下載地址
fun fileGetDownloadUrl(getDownloadUrlRequest: FileGetDownloadUrlRequest): FileGetDownloadUrlResp?
// 非同步任務狀態,例如刪除包含多個檔案的檔案夾,此時是一個非同步任務,可以通過這個介面擷取任務狀態
fun getAsyncTask(getAsyncTaskRequest: AsyncTaskRequest): AsyncTaskResp?