全部產品
Search
文件中心

Drive and Photo Service:Android SDK 簡介

更新時間:Dec 23, 2025

接入指南

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下載

aliyun-pds-sdk-0.1.4.aar

接入 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?