Documentation
¶
Overview ¶
Package pan123 是 123 云盘开放平台(https://www.123pan.com)的非官方 Go SDK。
快速开始:
client := pan123.New("your-client-id", "your-client-secret")
info, err := client.User.Info(ctx)
SDK 自动管理 access_token 的获取、缓存与过期刷新,并内置官方 QPS 限流与 429 退避重试。
Index ¶
- Constants
- func IsRateLimited(err error) bool
- func IsTokenExpired(err error) bool
- func ShareURL(uid int64, shareKey string) string
- type APIError
- type AccessTokenResult
- type BatchRenameResult
- type Client
- type CopyResult
- type CopyTaskStatus
- type DeleteMode
- type DeveloperInfo
- type DownloadAllResult
- type FileDetail
- type FileInfo
- type FileInfoV1
- type FileListRequest
- type FileListResult
- type FileListV1Request
- type FileListV1Result
- type FileService
- func (s *FileService) AsyncCopy(ctx context.Context, fileIDs []int64, targetDirID int64) (taskID int64, err error)
- func (s *FileService) BatchRename(ctx context.Context, renames map[int64]string) (*BatchRenameResult, error)
- func (s *FileService) Copy(ctx context.Context, fileID, targetDirID int64) (*CopyResult, error)
- func (s *FileService) CopyProcess(ctx context.Context, taskID int64) (CopyTaskStatus, error)
- func (s *FileService) Detail(ctx context.Context, fileID int64) (*FileDetail, error)
- func (s *FileService) DownloadInfo(ctx context.Context, fileID int64) (string, error)
- func (s *FileService) DownloadTo(ctx context.Context, fileID int64, w io.Writer) (int64, error)
- func (s *FileService) Infos(ctx context.Context, fileIDs []int64) ([]FileInfo, error)
- func (s *FileService) List(ctx context.Context, req *FileListRequest) (*FileListResult, error)
- func (s *FileService) ListAll(ctx context.Context, parentFileID int64) ([]FileInfo, error)
- func (s *FileService) ListV1(ctx context.Context, req *FileListV1Request) (*FileListV1Result, error)
- func (s *FileService) Mkdir(ctx context.Context, parentID int64, name string) (int64, error)
- func (s *FileService) Move(ctx context.Context, fileIDs []int64, toParentFileID int64) error
- func (s *FileService) Recover(ctx context.Context, fileIDs []int64) (abnormalFileIDs []int64, err error)
- func (s *FileService) RecoverTo(ctx context.Context, fileIDs []int64, parentFileID int64) error
- func (s *FileService) Rename(ctx context.Context, fileID int64, newName string) error
- func (s *FileService) SafeboxID(ctx context.Context, password string) (int64, error)
- func (s *FileService) Trash(ctx context.Context, fileIDs []int64) error
- type IPBlacklistStatus
- type LinkService
- func (s *LinkService) Disable(ctx context.Context, folderID int64) (string, error)
- func (s *LinkService) Enable(ctx context.Context, folderID int64) (string, error)
- func (s *LinkService) IPBlacklist(ctx context.Context) (ips []string, status IPBlacklistStatus, err error)
- func (s *LinkService) OfflineLogs(ctx context.Context, pageNum, pageSize int, startHour, endHour string) (*OfflineLogResult, error)
- func (s *LinkService) RefreshCache(ctx context.Context) error
- func (s *LinkService) SwitchIPBlacklist(ctx context.Context, status IPBlacklistStatus) (bool, error)
- func (s *LinkService) TrafficLog(ctx context.Context, pageNum, pageSize int, startTime, endTime string) (*TrafficLogResult, error)
- func (s *LinkService) URL(ctx context.Context, fileID int64) (string, error)
- func (s *LinkService) UpdateIPBlacklist(ctx context.Context, ips []string) error
- type OAuthService
- func (s *OAuthService) AuthURL(clientID, redirectURI, state string) string
- func (s *OAuthService) RefreshToken(ctx context.Context, clientID, clientSecret, refreshToken string) (*OAuthToken, error)
- func (s *OAuthService) TokenByCode(ctx context.Context, clientID, clientSecret, code, redirectURI string) (*OAuthToken, error)
- type OAuthToken
- type OfflineDownloadRequest
- type OfflineLogEntry
- type OfflineLogResult
- type OfflineProcessResult
- type OfflineService
- type OfflineStatus
- type Option
- type OssAsyncResult
- type OssCopyFailResult
- type OssCopyStatus
- type OssCreateResult
- type OssFile
- type OssListRequest
- type OssListResult
- type OssService
- func (s *OssService) CopyFailList(ctx context.Context, taskID string, page, limit int) (*OssCopyFailResult, error)
- func (s *OssService) CopyFromDisk(ctx context.Context, fileIDs []int64, toParentFileID string) (taskID string, err error)
- func (s *OssService) CopyProcess(ctx context.Context, taskID string) (OssCopyStatus, string, error)
- func (s *OssService) CreateFile(ctx context.Context, parentFileID, filename, etag string, size int64) (*OssCreateResult, error)
- func (s *OssService) Delete(ctx context.Context, fileIDs []string) error
- func (s *OssService) Detail(ctx context.Context, fileID string) (*OssFile, error)
- func (s *OssService) GetUploadURL(ctx context.Context, preuploadID string, sliceNo int64) (string, error)
- func (s *OssService) List(ctx context.Context, req *OssListRequest) (*OssListResult, error)
- func (s *OssService) Mkdir(ctx context.Context, parentID, name string) (string, error)
- func (s *OssService) Move(ctx context.Context, fileIDs []string, toParentFileID string) error
- func (s *OssService) OfflineDownload(ctx context.Context, req *OfflineDownloadRequest) (taskID int64, err error)
- func (s *OssService) OfflineProcess(ctx context.Context, taskID int64) (*OfflineProcessResult, error)
- func (s *OssService) UploadAsyncResult(ctx context.Context, preuploadID string) (*OssAsyncResult, error)
- func (s *OssService) UploadComplete(ctx context.Context, preuploadID string) (*OssUploadCompleteResult, error)
- func (s *OssService) UploadFile(ctx context.Context, parentFileID, filename string, r io.ReaderAt, size int64) (string, error)
- func (s *OssService) UploadFromPath(ctx context.Context, parentFileID, path string) (string, error)
- type OssUploadCompleteResult
- type PaidShareCreateRequest
- type ResolutionsResult
- type Sha1ReuseResult
- type ShareCreateRequest
- type ShareCreateResult
- type ShareInfo
- type ShareListResult
- type ShareService
- func (s *ShareService) Create(ctx context.Context, req *ShareCreateRequest) (*ShareCreateResult, error)
- func (s *ShareService) CreatePaid(ctx context.Context, req *PaidShareCreateRequest) (*ShareCreateResult, error)
- func (s *ShareService) List(ctx context.Context, limit int, lastShareID int64) (*ShareListResult, error)
- func (s *ShareService) ListPaid(ctx context.Context, limit int, lastShareID int64) (*ShareListResult, error)
- func (s *ShareService) Update(ctx context.Context, req *ShareUpdateRequest) error
- func (s *ShareService) UpdatePaid(ctx context.Context, req *ShareUpdateRequest) error
- type ShareUpdateRequest
- type SingleCreateResult
- type TrafficLogEntry
- type TrafficLogResult
- type TrafficSwitch
- type TranscodeDownloadResult
- type TranscodeFile
- type TranscodeRecord
- type TranscodeRequest
- type TranscodeResult
- type TranscodeService
- func (s *TranscodeService) CloudVideoFiles(ctx context.Context, req *FileListRequest) (*FileListResult, error)
- func (s *TranscodeService) Delete(ctx context.Context, fileID int64, mode DeleteMode) error
- func (s *TranscodeService) DownloadAll(ctx context.Context, fileID int64, zipName string) (*DownloadAllResult, error)
- func (s *TranscodeService) DownloadM3U8(ctx context.Context, fileID int64, resolution string) (*TranscodeDownloadResult, error)
- func (s *TranscodeService) DownloadOriginal(ctx context.Context, fileID int64) (*TranscodeDownloadResult, error)
- func (s *TranscodeService) DownloadTS(ctx context.Context, fileID int64, resolution, tsName string) (*TranscodeDownloadResult, error)
- func (s *TranscodeService) FolderInfo(ctx context.Context) (int64, error)
- func (s *TranscodeService) List(ctx context.Context, fileID int64) (*VideoTranscodeList, error)
- func (s *TranscodeService) Records(ctx context.Context, fileID int64) ([]TranscodeRecord, error)
- func (s *TranscodeService) Resolutions(ctx context.Context, fileID int64) (*ResolutionsResult, error)
- func (s *TranscodeService) Results(ctx context.Context, fileID int64) ([]TranscodeResult, error)
- func (s *TranscodeService) SpaceFiles(ctx context.Context, req *FileListRequest) (*FileListResult, error)
- func (s *TranscodeService) Transcode(ctx context.Context, req *TranscodeRequest) error
- func (s *TranscodeService) UploadFromCloudDisk(ctx context.Context, fileIDs []int64) error
- type UploadCompleteResult
- type UploadCompleteResultV1
- type UploadCreateRequest
- type UploadCreateResult
- type UploadCreateResultV1
- type UploadService
- func (s *UploadService) AsyncResultV1(ctx context.Context, preuploadID string) (*UploadCompleteResult, error)
- func (s *UploadService) Complete(ctx context.Context, preuploadID string) (*UploadCompleteResult, error)
- func (s *UploadService) CompleteV1(ctx context.Context, preuploadID string) (*UploadCompleteResultV1, error)
- func (s *UploadService) Create(ctx context.Context, req *UploadCreateRequest) (*UploadCreateResult, error)
- func (s *UploadService) CreateV1(ctx context.Context, req *UploadCreateRequest) (*UploadCreateResultV1, error)
- func (s *UploadService) Domains(ctx context.Context) ([]string, error)
- func (s *UploadService) GetUploadURLV1(ctx context.Context, preuploadID string, sliceNo int64) (string, error)
- func (s *UploadService) ListUploadPartsV1(ctx context.Context, preuploadID string) ([]UploadedPart, error)
- func (s *UploadService) PutSliceV1(ctx context.Context, presignedURL string, slice io.Reader, size int64) error
- func (s *UploadService) Sha1Reuse(ctx context.Context, parentFileID int64, filename, sha1 string, size int64, ...) (*Sha1ReuseResult, error)
- func (s *UploadService) SingleCreate(ctx context.Context, server string, req *UploadCreateRequest, file io.Reader) (*SingleCreateResult, error)
- func (s *UploadService) UploadFile(ctx context.Context, parentFileID int64, filename string, r io.ReaderAt, ...) (int64, error)
- func (s *UploadService) UploadFromPath(ctx context.Context, parentFileID int64, path string) (int64, error)
- func (s *UploadService) UploadSlice(ctx context.Context, server, preuploadID string, sliceNo int64, ...) error
- type UploadedPart
- type UserInfo
- type UserService
- type VideoTranscodeItem
- type VideoTranscodeList
- type VipInfo
Constants ¶
const AuthBaseURL = "https://yun.123pan.com"
AuthBaseURL 是授权页面域名。
const DefaultBaseURL = "https://open-api.123pan.com"
DefaultBaseURL 是开放平台的接口域名。
const OAuthScope = "user:base,file:all:read,file:all:write"
OAuthScope 是授权固定 scope。
Variables ¶
This section is empty.
Functions ¶
func IsTokenExpired ¶
IsTokenExpired 判断错误是否为 access_token 无效(code=401)。
Types ¶
type APIError ¶
type APIError struct {
// Code 是响应体中的业务错误码。
Code int
// Message 是平台返回的错误描述。
Message string
// TraceID 用于联系官方技术支持时定位问题。
TraceID string
}
APIError 表示开放平台返回的业务错误(响应 code != 0)。
type AccessTokenResult ¶
type AccessTokenResult struct {
AccessToken string `json:"accessToken"`
ExpiredAt time.Time `json:"expiredAt"`
}
AccessTokenResult 是获取 access_token 接口的返回。
type BatchRenameResult ¶
type BatchRenameResult struct {
// SuccessList 重命名成功的文件列表。
SuccessList []struct {
FileID int64 `json:"fileID"`
UpdateAt string `json:"updateAt"`
} `json:"successList"`
// FailList 重命名失败的文件列表及失败原因。
FailList []struct {
FileID int64 `json:"fileID"`
Message string `json:"message"`
} `json:"failList"`
}
BatchRenameResult 是批量重命名的返回(可能为空)。
type Client ¶
type Client struct {
// 服务分组
File *FileService
Upload *UploadService
Offline *OfflineService
User *UserService
Link *LinkService
Oss *OssService
Transcode *TranscodeService
OAuth *OAuthService
// contains filtered or unexported fields
}
Client 是 123 云盘开放平台的 API 客户端。 通过 New 或 NewWithToken 创建;零值不可用。
func NewWithToken ¶
NewWithToken 使用已有 access_token 创建客户端(例如三方挂载应用 OAuth 授权得到的 token)。 此模式下 SDK 不会自动刷新 token;过期后请调用 SetToken 更新。
func (*Client) RefreshToken ¶
func (c *Client) RefreshToken(ctx context.Context) (*AccessTokenResult, error)
RefreshToken 强制重新获取 access_token(clientID/clientSecret 模式)。 一般无需手动调用,SDK 会在过期前自动刷新。
type CopyResult ¶
type CopyResult struct {
// SourceFileID 源文件 ID。
SourceFileID int64 `json:"sourceFileId"`
// TargetFileID 复制生成的新文件 ID。
TargetFileID int64 `json:"targetFileId"`
}
CopyResult 是复制单个文件的返回。
type CopyTaskStatus ¶
type CopyTaskStatus int
CopyTaskStatus 是批量复制任务状态:0-待处理 1-进行中 2-已完成 3-失败。
const ( // CopyTaskPending 待处理。 CopyTaskPending CopyTaskStatus = 0 // CopyTaskRunning 进行中。 CopyTaskRunning CopyTaskStatus = 1 // CopyTaskDone 已完成。 CopyTaskDone CopyTaskStatus = 2 // CopyTaskFailed 失败。 CopyTaskFailed CopyTaskStatus = 3 )
type DeleteMode ¶
type DeleteMode int
DeleteMode 控制删除转码视频时的删除范围。
const ( // DeleteOriginal 仅删除原文件。 DeleteOriginal DeleteMode = 1 // DeleteOriginalAndTranscoded 删除原文件及转码后的文件(不可逆)。 DeleteOriginalAndTranscoded DeleteMode = 2 )
type DeveloperInfo ¶
type DeveloperInfo struct {
// StartTime 权益开始时间。
StartTime string `json:"startTime"`
// EndTime 权益结束时间。
EndTime string `json:"endTime"`
}
DeveloperInfo 是开发者权益信息(直链等接口多数需要开通该权益)。
type DownloadAllResult ¶
type DownloadAllResult struct {
// IsDownloading 为 true 表示服务端仍在打包,需继续轮询(官方建议间隔 10s)。
IsDownloading bool `json:"isDownloading"`
// IsFull 转码空间容量是否已满(满则无法下载)。
IsFull bool `json:"isFull"`
// DownloadURL 打包 zip 的下载地址,仅在未满且打包完成时有值。
DownloadURL string `json:"downloadUrl"`
}
DownloadAllResult 是打包下载全部转码文件接口的返回。
type FileDetail ¶
type FileDetail struct {
// FileID 文件 ID。
FileID int64 `json:"fileID"`
// Filename 文件名。
Filename string `json:"filename"`
// Type 0-文件 1-文件夹。
Type int `json:"type"`
// Size 文件大小(字节);查询文件夹时为文件夹内文件累计大小。
Size int64 `json:"size"`
// Etag 文件 MD5。
Etag string `json:"etag"`
// Status 文件审核状态,大于 100 为审核驳回文件。
Status int `json:"status"`
// ParentFileID 父目录 ID,根目录为 0。
ParentFileID int64 `json:"parentFileID"`
// CreateAt 创建时间。
CreateAt string `json:"createAt"`
// Trashed 是否在回收站:0-否 1-是。
Trashed int `json:"trashed"`
}
FileDetail 是单个文件详情。
type FileInfo ¶
type FileInfo struct {
// FileID 文件 ID。
FileID int64 `json:"fileId"`
// Filename 文件名。
Filename string `json:"filename"`
// Type 0-文件 1-文件夹。
Type int `json:"type"`
// Size 文件大小(字节)。
Size int64 `json:"size"`
// Etag 文件 MD5。
Etag string `json:"etag"`
// Status 文件审核状态,大于 100 为审核驳回文件。
Status int `json:"status"`
// ParentFileID 父目录 ID,根目录为 0。
ParentFileID int64 `json:"parentFileId"`
// Category 文件分类:0-未知 1-音频 2-视频 3-图片。
Category int `json:"category"`
// Trashed 是否在回收站:0-否 1-是。
Trashed int `json:"trashed"`
// PunishFlag 文件处罚标记,非 0 表示文件被处罚(如违规封禁)。
PunishFlag int `json:"punishFlag"`
// S3KeyFlag 文件存储 Key 标识,转存/分享等场景使用。
S3KeyFlag string `json:"s3KeyFlag"`
// StorageNode 文件所在存储节点。
StorageNode string `json:"storageNode"`
// CreateAt 创建时间,格式如 2006-01-02 15:04:05。
CreateAt string `json:"createAt"`
// UpdateAt 更新时间,格式如 2006-01-02 15:04:05。
UpdateAt string `json:"updateAt"`
}
FileInfo 是 v2 文件列表及多文件详情返回的文件信息。
type FileInfoV1 ¶
type FileInfoV1 struct {
// FileID 文件 ID。
FileID int64 `json:"fileID"`
// Filename 文件名。
Filename string `json:"filename"`
// Type 0-文件 1-文件夹。
Type int `json:"type"`
// Size 文件大小(字节)。
Size int64 `json:"size"`
// Etag 文件 MD5。
Etag string `json:"etag"`
// Status 文件审核状态,大于 100 为审核驳回文件。
Status int `json:"status"`
// ParentFileID 父目录 ID,根目录为 0。
ParentFileID int64 `json:"parentFileId"`
// ParentName 父目录名称。
ParentName string `json:"parentName"`
// Category 文件分类:0-未知 1-音频 2-视频 3-图片。
Category int `json:"category"`
// CreateAt 创建时间。
CreateAt string `json:"createAt"`
// UpdateAt 更新时间。
UpdateAt string `json:"updateAt"`
// Thumbnail 缩略图地址(图片/视频等有缩略图时返回)。
Thumbnail string `json:"thumbnail"`
// DownloadURL 下载地址(可能为空)。
DownloadURL string `json:"downloadUrl"`
}
FileInfoV1 是 v1 旧版文件列表的文件信息。
type FileListRequest ¶
type FileListRequest struct {
// ParentFileID 文件夹 ID,根目录为 0。
ParentFileID int64
// Limit 每页数量,最大 100;0 时默认 100。
Limit int
// SearchData 搜索关键字;非空时忽略 ParentFileID 做全局搜索。
SearchData string
// SearchMode 0-模糊搜索 1-精准搜索。
SearchMode int
// LastFileID 翻页游标,取上一页返回的 LastFileID。
LastFileID int64
}
FileListRequest 是 v2 文件列表(推荐)的查询参数。
type FileListResult ¶
type FileListResult struct {
// LastFileID 为 -1 表示最后一页;否则作为下一页的翻页游标。
LastFileID int64 `json:"lastFileId"`
// FileList 当前页的文件列表。
FileList []FileInfo `json:"fileList"`
}
FileListResult 是 v2 文件列表的返回。
type FileListV1Request ¶
type FileListV1Request struct {
// ParentFileID 文件夹 ID,根目录为 0。
ParentFileID int64
// Page 页码,从 1 开始。
Page int
// Limit 每页数量,最大 100;0 时默认 100。
Limit int
// OrderBy 排序字段:file_id、size、file_name;空时默认 file_id。
OrderBy string
// OrderDirection 排序方向:asc、desc;空时默认 asc。
OrderDirection string
// Trashed 是否查看回收站文件。
Trashed bool
// SearchData 搜索关键字。
SearchData string
}
FileListV1Request 是 v1 旧版文件列表的查询参数。
type FileListV1Result ¶
type FileListV1Result struct {
// Total 符合条件的文件总数。
Total int `json:"total"`
// FileList 当前页的文件列表。
FileList []FileInfoV1 `json:"fileList"`
}
FileListV1Result 是 v1 旧版文件列表的返回。
type FileService ¶
type FileService struct {
// contains filtered or unexported fields
}
FileService 提供文件管理相关接口:目录、重命名、删除/还原、复制、移动、详情、列表、保险箱、下载。
func (*FileService) AsyncCopy ¶
func (s *FileService) AsyncCopy(ctx context.Context, fileIDs []int64, targetDirID int64) (taskID int64, err error)
AsyncCopy 批量复制文件(异步),返回任务 ID。
接口: POST /api/v1/file/async/copy
参数:
- fileIDs: 要复制的文件 ID 列表,单级最多 3000 个。
- targetDirID: 目标目录 ID,复制到根目录时填 0。
提交后接口立即返回,需用 CopyProcess 携带任务 ID 轮询复制进度。
func (*FileService) BatchRename ¶
func (s *FileService) BatchRename(ctx context.Context, renames map[int64]string) (*BatchRenameResult, error)
BatchRename 批量重命名文件。
接口: POST /api/v1/file/rename
参数:
- renames: 重命名映射,key 为文件 ID、value 为新文件名,一次最多 30 个。
注意:部分成功部分失败时不会返回错误,需检查返回值中的 FailList。
func (*FileService) Copy ¶
func (s *FileService) Copy(ctx context.Context, fileID, targetDirID int64) (*CopyResult, error)
Copy 复制单个文件到目标目录(同步接口)。
接口: POST /api/v1/file/copy
参数:
- fileID: 要复制的文件 ID。
- targetDirID: 目标目录 ID,复制到根目录时填 0。
批量复制请使用 AsyncCopy。
func (*FileService) CopyProcess ¶
func (s *FileService) CopyProcess(ctx context.Context, taskID int64) (CopyTaskStatus, error)
CopyProcess 查询批量复制任务进度。
接口: GET /api/v1/file/async/copy/process
参数:
- taskID: AsyncCopy 返回的任务 ID。
返回任务状态,见 CopyTaskStatus 枚举(0-待处理 1-进行中 2-已完成 3-失败)。
func (*FileService) Detail ¶
func (s *FileService) Detail(ctx context.Context, fileID int64) (*FileDetail, error)
Detail 获取单个文件详情。
接口: GET /api/v1/file/detail
参数:
- fileID: 文件 ID。
查询文件夹时返回的 Size 为文件夹累计大小。
func (*FileService) DownloadInfo ¶
DownloadInfo 获取文件的临时下载直链。
接口: GET /api/v1/file/download_info
参数:
- fileID: 文件 ID(须为文件,不能是文件夹)。
注意:免费账号每日自用下载流量 1GB,超限返回 code 5113; 文件不存在返回 code 5066。直链有时效性,建议即取即用。
func (*FileService) DownloadTo ¶
DownloadTo 获取下载直链并把文件内容写入 w,返回写入的字节数。
接口: GET /api/v1/file/download_info 获取直链后,直接 GET 直链下载
参数:
- fileID: 文件 ID。
- w: 文件内容的写入目标。
流量限制与错误码同 DownloadInfo(超流量 5113、文件不存在 5066)。
func (*FileService) List ¶
func (s *FileService) List(ctx context.Context, req *FileListRequest) (*FileListResult, error)
List 获取文件列表(v2 推荐接口,lastFileId 游标翻页)。
接口: GET /api/v2/file/list (QPS 15)
参数:
- req: 查询参数,见 FileListRequest;为 nil 时按根目录、每页 100 处理。
翻页:返回的 LastFileID 为 -1 表示最后一页,否则填入下一次请求的 req.LastFileID 继续拉取。 注意:结果包含回收站文件,需按 Trashed 字段过滤;ListAll 已代为处理。
func (*FileService) ListAll ¶
ListAll 自动翻页拉取目录下全部文件(已过滤回收站中的文件)。
接口: GET /api/v2/file/list (QPS 15),内部循环调用 List 直至最后一页
参数:
- parentFileID: 目录 ID,根目录为 0。
注意:目录下文件很多时会产生多次请求,客户端限流可能使耗时变长。
func (*FileService) ListV1 ¶
func (s *FileService) ListV1(ctx context.Context, req *FileListV1Request) (*FileListV1Result, error)
ListV1 获取文件列表(旧版 v1,page 页码翻页)。官方推荐使用 List(v2)。
接口: GET /api/v1/file/list (QPS 10)
参数:
- req: 查询参数,见 FileListV1Request;为 nil 时按根目录、第 1 页、 每页 100、file_id 升序处理。
func (*FileService) Mkdir ¶
Mkdir 创建目录,返回新目录 ID。
接口: POST /upload/v1/file/mkdir (QPS 20)
参数:
- parentID: 父目录 ID,创建到根目录时填 0。
- name: 目录名,不能与同级目录重名,且不能包含 "\/:*?|>< 等非法字符。
func (*FileService) Move ¶
Move 批量移动文件到目标目录。
接口: POST /api/v1/file/move (QPS 20)
参数:
- fileIDs: 要移动的文件 ID 列表,单级最多 100 个。
- toParentFileID: 目标目录 ID,移动到根目录时填 0。
func (*FileService) Recover ¶
func (s *FileService) Recover(ctx context.Context, fileIDs []int64) (abnormalFileIDs []int64, err error)
Recover 从回收站恢复文件至原位置。
接口: POST /api/v1/file/recover
参数:
- fileIDs: 要恢复的文件 ID 列表,一次最多 100 个。
返回父级目录已不存在的异常文件 ID 列表,这些文件可用 RecoverTo 还原到指定目录。
func (*FileService) RecoverTo ¶
RecoverTo 将回收站文件还原到指定目录。
接口: POST /api/v1/file/recover/by_path
参数:
- fileIDs: 要还原的文件 ID 列表,一次最多 100 个。
- parentFileID: 还原目标目录 ID,根目录为 0。
func (*FileService) Rename ¶
Rename 重命名单个文件。
接口: PUT /api/v1/file/name
参数:
- fileID: 要重命名的文件 ID。
- newName: 新文件名,须小于 255 字符,不能包含 "\/:*?|>< 等非法字符。
type IPBlacklistStatus ¶
type IPBlacklistStatus int
IPBlacklistStatus IP 黑名单开关状态。 枚举值:1 启用;2 禁用。
const ( // IPBlacklistEnabled 黑名单启用。 IPBlacklistEnabled IPBlacklistStatus = 1 // IPBlacklistDisabled 黑名单禁用。 IPBlacklistDisabled IPBlacklistStatus = 2 )
type LinkService ¶
type LinkService struct {
// contains filtered or unexported fields
}
LinkService 提供直链相关接口:直链空间启停、直链获取、缓存刷新、 流量/离线日志查询、IP 黑名单配置。多数接口需要开通开发者权益。
func (*LinkService) Disable ¶
Disable 对文件夹禁用直链空间,返回该文件夹的名称。
接口: POST /api/v1/direct-link/disable
参数说明:
- folderID:要禁用直链空间的文件夹(目录)ID。
注意事项:需要开通开发者权益;禁用后该目录下已生成的直链将失效。
func (*LinkService) Enable ¶
Enable 对文件夹启用直链空间,返回该文件夹的名称。
接口: POST /api/v1/direct-link/enable
参数说明:
- folderID:要启用直链空间的文件夹(目录)ID。
注意事项:需要开通开发者权益;启用后该目录下的文件才能通过 URL 获取直链。
func (*LinkService) IPBlacklist ¶
func (s *LinkService) IPBlacklist(ctx context.Context) (ips []string, status IPBlacklistStatus, err error)
IPBlacklist 获取直链 IP 黑名单列表及当前开关状态。
接口: GET /api/v1/developer/config/forbide-ip/list
返回说明:
- ips:当前黑名单中的 IPv4 地址列表(上限 2000 个)。
- status:黑名单开关状态,1 启用;2 禁用。
注意事项:需要开通开发者权益。
func (*LinkService) OfflineLogs ¶
func (s *LinkService) OfflineLogs(ctx context.Context, pageNum, pageSize int, startHour, endHour string) (*OfflineLogResult, error)
OfflineLogs 分页查询直链离线日志文件列表(按小时打包的 .gz 文件)。
接口: GET /api/v1/direct-link/offline/logs
参数说明:
- pageNum:页码,从 1 开始。
- pageSize:每页数量。
- startHour/endHour:查询时间范围,精确到小时,格式为 "2025010115" (即 yyyyMMddHH)。
注意事项:需要开通开发者权益;离线日志仅可查询最近 30 天的数据, 日志内容需通过条目中的 DownloadURL 自行下载解压。
func (*LinkService) RefreshCache ¶
func (s *LinkService) RefreshCache(ctx context.Context) error
RefreshCache 全量刷新直链 CDN 缓存。
接口: POST /api/v1/direct-link/cache/refresh
注意事项:需要开通开发者权益;为全量刷新,不支持按文件粒度刷新, 文件内容更新后调用可使 CDN 尽快回源取新内容。
func (*LinkService) SwitchIPBlacklist ¶
func (s *LinkService) SwitchIPBlacklist(ctx context.Context, status IPBlacklistStatus) (bool, error)
SwitchIPBlacklist 开启或关闭直链 IP 黑名单,返回操作是否完成。
接口: POST /api/v1/developer/config/forbide-ip/switch
参数说明:
- status:目标开关状态,IPBlacklistEnabled(1 启用)或 IPBlacklistDisabled(2 禁用)。
注意事项:需要开通开发者权益;黑名单条目通过 UpdateIPBlacklist 维护, 仅当状态为启用时黑名单才会生效。
func (*LinkService) TrafficLog ¶
func (s *LinkService) TrafficLog(ctx context.Context, pageNum, pageSize int, startTime, endTime string) (*TrafficLogResult, error)
TrafficLog 分页查询直链流量消耗明细日志。
接口: GET /api/v1/direct-link/log
参数说明:
- pageNum:页码,从 1 开始。
- pageSize:每页数量。
- startTime/endTime:查询时间范围(闭区间), 格式为 "2025-01-01 00:00:00"。
注意事项:需要开通开发者权益;流量日志仅可查询最近 3 天的数据, 更早的明细请通过 OfflineLogs 下载离线日志文件。
func (*LinkService) URL ¶
URL 获取文件的直链链接。
接口: GET /api/v1/direct-link/url
参数说明:
- fileID:文件 ID。前提是该文件所在目录已通过 Enable 启用直链空间, 否则接口会返回错误。
注意事项:需要开通开发者权益;直链访问会消耗直链流量 (剩余流量见 UserInfo.DirectTraffic)。
func (*LinkService) UpdateIPBlacklist ¶
func (s *LinkService) UpdateIPBlacklist(ctx context.Context, ips []string) error
UpdateIPBlacklist 全量覆盖更新直链 IP 黑名单列表。
接口: POST /api/v1/developer/config/forbide-ip/update
参数说明:
- ips:黑名单 IP 列表,仅支持 IPv4 地址,最多 2000 个。
注意事项:需要开通开发者权益;本接口为全量覆盖更新, 传入的列表会替换现有全部黑名单条目(追加/删除需先经 IPBlacklist 取回现有列表合并后再提交)。
type OAuthService ¶
type OAuthService struct {
// contains filtered or unexported fields
}
OAuthService 提供第三方挂载应用的 OAuth 授权接口。 接入需先通过官方资质审核获得 appId 与 secretId(暂不支持个人开发者)。
func (*OAuthService) AuthURL ¶
func (s *OAuthService) AuthURL(clientID, redirectURI, state string) string
AuthURL 构造用户授权页面地址(浏览器跳转用,本方法不发起 HTTP 请求)。
接口: GET https://yun.123pan.com/auth(授权页面,域名固定为 yun.123pan.com)
参数:
- clientID: 应用的 appId。
- redirectURI: 授权后的回跳地址,须与应用注册的回调地址一致。
- state: 自定义透传参数,回跳时原样带回,可用于防 CSRF。
注意: scope 固定为 OAuthScope;用户授权后将携带 code(与 state)回跳 redirectURI,随后用 TokenByCode 换取 access_token。
func (*OAuthService) RefreshToken ¶
func (s *OAuthService) RefreshToken(ctx context.Context, clientID, clientSecret, refreshToken string) (*OAuthToken, error)
RefreshToken 用 refresh_token 刷新令牌。
接口: POST /api/v1/oauth2/access_token (QPS 限制 100 次/分钟)
参数:
- clientID: 应用的 appId。
- clientSecret: 应用的 secretId。
- refreshToken: 上次颁发的 refresh_token(单次有效,有效期 90 天)。
注意: 刷新成功后旧 access_token 立即失效,refresh_token 同时换新(旧值 作废),必须持久化新返回的 RefreshToken,否则后续将无法再次刷新。 该接口返回扁平 JSON,不包裹统一响应结构。
func (*OAuthService) TokenByCode ¶
func (s *OAuthService) TokenByCode(ctx context.Context, clientID, clientSecret, code, redirectURI string) (*OAuthToken, error)
TokenByCode 用授权 code 换取 access_token。
接口: POST /api/v1/oauth2/access_token (QPS 限制 100 次/分钟)
参数:
- clientID: 应用的 appId。
- clientSecret: 应用的 secretId。
- code: 授权回跳携带的授权码,一次性使用。
- redirectURI: 必须与应用注册的回调地址一致。
注意: 该接口返回扁平 JSON,不包裹统一响应结构。access_token 有效期见 ExpiresIn(秒);refresh_token 单次有效、90 天有效期,务必持久化保存。
type OAuthToken ¶
type OAuthToken struct {
TokenType string `json:"token_type"`
AccessToken string `json:"access_token"`
// RefreshToken 单次有效,90 天有效期;每次刷新都会返回新的 refresh_token,必须持久化替换旧值。
RefreshToken string `json:"refresh_token"`
// ExpiresIn access_token 过期时间(秒)。
ExpiresIn int64 `json:"expires_in"`
Scope string `json:"scope"`
}
OAuthToken 是 OAuth 接口返回的令牌。
type OfflineDownloadRequest ¶
type OfflineDownloadRequest struct {
// URL 下载资源地址,仅支持 http/https。
URL string `json:"url"`
// FileName 自定义文件名称(可选)。
FileName string `json:"fileName,omitempty"`
// DirID 下载到的目标目录 ID(可选)。不支持根目录,
// 默认下载到名为"来自:离线下载"的目录。
DirID int64 `json:"dirID,omitempty"`
// CallBackURL 回调地址(可选)。下载成功或失败时以 POST 通知:
// {"url":"...","status":0,"failReason":"","fileID":100},status 0 成功 1 失败。
CallBackURL string `json:"callBackUrl,omitempty"`
}
OfflineDownloadRequest 是创建离线下载任务的参数。
type OfflineLogEntry ¶
type OfflineLogEntry struct {
// ID 日志文件 ID(文档标 string,实际可能返回数字,用 any 兼容)。
ID any `json:"id"`
// FileName 日志文件名称。
FileName string `json:"fileName"`
// FileSize 日志文件大小(字节)。
FileSize int64 `json:"fileSize"`
// LogTimeRange 该日志文件覆盖的时间范围。
LogTimeRange string `json:"logTimeRange"`
// DownloadURL 日志文件(.gz)下载地址。
DownloadURL string `json:"downloadURL"`
}
OfflineLogEntry 是直链离线日志文件条目(按小时打包的 .gz 日志)。
type OfflineLogResult ¶
type OfflineLogResult struct {
// Total 日志文件总数。
Total int64 `json:"total"`
// List 当前页的日志文件条目。
List []OfflineLogEntry `json:"list"`
}
OfflineLogResult 是直链离线日志的返回。
type OfflineProcessResult ¶
type OfflineProcessResult struct {
// Process 下载进度百分比(0-100);下载失败时会归零。
Process float64 `json:"process"`
// Status 任务状态:0 进行中;1 下载失败;2 下载成功;3 重试中。
Status OfflineStatus `json:"status"`
}
OfflineProcessResult 是离线下载进度。
type OfflineService ¶
type OfflineService struct {
// contains filtered or unexported fields
}
OfflineService 提供离线下载相关接口:创建离线下载任务并查询任务进度。
func (*OfflineService) Download ¶
func (s *OfflineService) Download(ctx context.Context, req *OfflineDownloadRequest) (taskID int64, err error)
Download 创建离线下载任务,返回任务 ID(可用于 Process 查询进度)。
接口: POST /api/v1/offline/download
参数说明(见 OfflineDownloadRequest 各字段):
- URL:下载资源地址,必填,仅支持 http/https 协议。
- FileName:自定义文件名称,可选。
- DirID:下载到的目标目录 ID,可选;不支持根目录, 不填时默认下载到名为"来自:离线下载"的目录。
- CallBackURL:回调地址,可选;任务结束(成功或失败)时以 POST 通知, 回调体形如 {"url":"...","status":0,"failReason":"","fileID":100}, 其中 status 0 成功、1 失败。
注意事项:接口返回成功仅表示任务创建成功,下载结果需通过 Process 轮询或回调地址获知。
func (*OfflineService) Process ¶
func (s *OfflineService) Process(ctx context.Context, taskID int64) (*OfflineProcessResult, error)
Process 查询离线下载任务的进度与状态。
接口: GET /api/v1/offline/download/process
参数说明:
- taskID:离线下载任务 ID,由 Download 返回。
注意事项:应以 Status 判断任务结果,不能仅凭 Process 判断—— 失败时 Process 会归零;Status 为 3(重试中)时任务仍未终结, 需要继续轮询直至变为 1(失败)或 2(成功)。
type OfflineStatus ¶
type OfflineStatus int
OfflineStatus 离线下载状态。 枚举值:0 进行中;1 下载失败;2 下载成功;3 重试中。 其中 3(重试中)不是终态,任务仍可能转为成功或失败。
const ( // OfflineRunning 进行中。 OfflineRunning OfflineStatus = 0 // OfflineFailed 下载失败(终态)。 OfflineFailed OfflineStatus = 1 // OfflineSuccess 下载成功(终态)。 OfflineSuccess OfflineStatus = 2 // OfflineRetrying 重试中,仍未终结。 OfflineRetrying OfflineStatus = 3 )
type Option ¶
type Option func(*Client)
Option 配置 Client。
func WithHTTPClient ¶
WithHTTPClient 使用自定义 *http.Client(超时、代理等)。
func WithMaxRetries ¶
WithMaxRetries 设置遇到限流(code=429)时的最大重试次数,0 表示不重试。
type OssAsyncResult ¶
type OssAsyncResult struct {
// Completed 为 false 时至少间隔 1 秒再轮询。
Completed bool `json:"completed"`
FileID string `json:"fileID"`
}
OssAsyncResult 是图床异步轮询上传结果的返回。
type OssCopyFailResult ¶
type OssCopyFailResult struct {
Total int64 `json:"total"`
List []struct {
FileID int64 `json:"fileId"`
Filename string `json:"filename"`
} `json:"list"`
}
OssCopyFailResult 是复制失败文件列表的返回。
type OssCopyStatus ¶
type OssCopyStatus int
OssCopyStatus 复制任务状态:1 进行中,2 结束,3 失败,4 等待。
const ( OssCopyRunning OssCopyStatus = 1 OssCopyDone OssCopyStatus = 2 OssCopyFailed OssCopyStatus = 3 OssCopyWaiting OssCopyStatus = 4 )
type OssCreateResult ¶
type OssCreateResult struct {
// FileID 秒传成功时返回的文件 ID。
FileID string `json:"fileID"`
// PreuploadID 预上传 ID(Reuse 为 true 时不存在)。
PreuploadID string `json:"preuploadID"`
// Reuse 为 true 表示秒传成功。
Reuse bool `json:"reuse"`
// SliceSize 分片大小,必须按此大小切分。
SliceSize int64 `json:"sliceSize"`
}
OssCreateResult 是图床创建文件(预上传)的返回。
type OssFile ¶
type OssFile struct {
FileID string `json:"fileId"`
Filename string `json:"filename"`
// Type 0-文件 1-文件夹。
Type int `json:"type"`
Size int64 `json:"size"`
Etag string `json:"etag"`
// Status 文件审核状态,大于 100 为审核驳回文件。
Status int `json:"status"`
CreateAt string `json:"createAt"`
UpdateAt string `json:"updateAt"`
// DownloadURL 图片下载/外链地址。
DownloadURL string `json:"downloadURL"`
// UserSelfURL 自定义域名链接。
UserSelfURL string `json:"userSelfURL"`
// TotalTraffic 流量统计(字节)。
TotalTraffic int64 `json:"totalTraffic"`
ParentFileID string `json:"parentFileId"`
ParentFilename string `json:"parentFilename"`
// Extension 后缀名,如 jpg。
Extension string `json:"extension"`
}
OssFile 是图床文件信息。
type OssListRequest ¶
type OssListRequest struct {
// ParentFileID 父目录 ID,空表示根目录。
ParentFileID string `json:"parentFileId,omitempty"`
// Limit 每页数量,最大 100。
Limit int `json:"limit"`
// StartTime/EndTime 按创建时间筛选(Unix 时间戳,可选)。
StartTime int64 `json:"startTime,omitempty"`
EndTime int64 `json:"endTime,omitempty"`
// LastFileID 翻页游标,取上一页返回值;返回 "-1" 表示最后一页。
LastFileID string `json:"lastFileId,omitempty"`
}
OssListRequest 是图片列表的查询参数。
type OssListResult ¶
type OssListResult struct {
// LastFileID 为 "-1" 表示最后一页。
LastFileID string `json:"lastFileId"`
FileList []OssFile `json:"fileList"`
}
OssListResult 是图片列表的返回。
type OssService ¶
type OssService struct {
// contains filtered or unexported fields
}
OssService 提供图床相关接口:目录/图片上传、云盘图片复制、移动、删除、 图片信息查询、离线迁移。注意:图床的文件/目录 ID 为字符串类型。
func (*OssService) CopyFailList ¶
func (s *OssService) CopyFailList(ctx context.Context, taskID string, page, limit int) (*OssCopyFailResult, error)
CopyFailList 分页查询复制失败的文件列表。
接口: GET /api/v1/oss/source/copy/fail
参数:
- taskID: CopyFromDisk 返回的任务 ID。
- page: 页码,从 1 开始。
- limit: 每页数量,最大 100。
func (*OssService) CopyFromDisk ¶
func (s *OssService) CopyFromDisk(ctx context.Context, fileIDs []int64, toParentFileID string) (taskID string, err error)
CopyFromDisk 创建"复制云盘图片到图床"任务,返回任务 ID。
接口: POST /api/v1/oss/source/copy
参数:
- fileIDs: 云盘文件/目录 ID(int64,与图床的字符串 ID 不同),一次最多 100 个。
- toParentFileID: 图床目标目录 ID(字符串),空字符串表示图床根目录。
注意: 并发任务上限 3 个;单任务图片总数上限 1000 张;单图上限 100M。 任务进度用 CopyProcess 查询,失败明细用 CopyFailList 查询。
func (*OssService) CopyProcess ¶
func (s *OssService) CopyProcess(ctx context.Context, taskID string) (OssCopyStatus, string, error)
CopyProcess 查询复制任务的状态与失败原因。
接口: GET /api/v1/oss/source/copy/process
参数:
- taskID: CopyFromDisk 返回的任务 ID。
注意: 状态枚举见 OssCopyStatus:1 进行中、2 结束、3 失败、4 等待; 失败时可用 CopyFailList 分页获取失败文件明细。
func (*OssService) CreateFile ¶
func (s *OssService) CreateFile(ctx context.Context, parentFileID, filename, etag string, size int64) (*OssCreateResult, error)
CreateFile 图床创建文件(预上传),是图床上传流程的第一步。
接口: POST /upload/v1/oss/file/create
参数:
- parentFileID: 图床父目录 ID(字符串),空字符串表示根目录。
- filename: 文件名,仅支持 png/gif/jpeg/tiff/webp/jpg/tif/svg/bmp 格式。
- etag: 文件内容的 MD5(十六进制字符串)。
- size: 文件大小,单位字节,单图上限 100M。
注意: 返回 Reuse 为 true 表示秒传成功,无需再上传分片。相同 etag+size 视为同一张图片,重复上传会覆盖。上传流程与云盘 V1 相同: CreateFile → GetUploadURL(逐片预签名)→ PUT 二进制 → UploadComplete。
func (*OssService) Delete ¶
func (s *OssService) Delete(ctx context.Context, fileIDs []string) error
Delete 批量删除图床图片。
接口: POST /api/v1/oss/file/delete
参数:
- fileIDs: 图床文件 ID 列表(字符串),一次最多 100 个。
func (*OssService) Detail ¶
Detail 获取单张图床图片的详情。
接口: GET /api/v1/oss/file/detail
参数:
- fileID: 图床文件 ID(字符串)。
func (*OssService) GetUploadURL ¶
func (s *OssService) GetUploadURL(ctx context.Context, preuploadID string, sliceNo int64) (string, error)
GetUploadURL 获取图床分片的预签名上传地址。
接口: POST /upload/v1/oss/file/get_upload_url
参数:
- preuploadID: CreateFile 返回的预上传 ID。
- sliceNo: 分片序号,从 1 开始;分片须严格按 CreateFile 返回的 SliceSize 切分。
注意: 获取后向该地址直接 PUT 分片二进制,不携带任何鉴权头 (可复用 Upload.PutSliceV1)。
func (*OssService) List ¶
func (s *OssService) List(ctx context.Context, req *OssListRequest) (*OssListResult, error)
List 获取图床图片列表,使用 lastFileId 游标翻页。
接口: POST /api/v1/oss/file/list
参数:
- req: 查询参数,见 OssListRequest;为 nil 时查询根目录,Limit 未设置时默认 100(上限)。
注意: 游标为字符串类型(与云盘不同);返回的 LastFileID 为 "-1" 表示已到 最后一页,否则将其回传到下一页请求的 LastFileID 继续翻页。
func (*OssService) Mkdir ¶
Mkdir 创建图床目录,返回新目录 ID。
接口: POST /upload/v1/oss/file/mkdir
参数:
- parentID: 父目录 ID(图床 ID 为字符串类型,与云盘的 int64 不同),空字符串表示根目录。
- name: 目录名称。
注意: 返回的目录 ID 同样为字符串类型,可作为后续上传、移动等操作的父目录 ID。
func (*OssService) Move ¶
Move 批量移动图床图片到目标目录。
接口: POST /api/v1/oss/file/move
参数:
- fileIDs: 图床文件 ID 列表(字符串),单级最多 100 个。
- toParentFileID: 目标目录 ID(字符串),不能为空。
func (*OssService) OfflineDownload ¶
func (s *OssService) OfflineDownload(ctx context.Context, req *OfflineDownloadRequest) (taskID int64, err error)
OfflineDownload 创建图床离线迁移任务(从 URL 拉取图片到图床),返回任务 ID。
接口: POST /api/v1/oss/offline/download
参数:
- req: 任务参数。URL 为图片直链,仅支持 http/https;FileName 可选,自定义 保存文件名;DirID 可选,目标图床目录 ID(0 表示根目录);CallBackURL 可选, 任务完成后的回调通知地址。
注意: 仅支持 png/gif/jpeg/tiff/webp/jpg/tif/svg/bmp 格式,单图上限 100M; 任务进度用 OfflineProcess 查询。
func (*OssService) OfflineProcess ¶
func (s *OssService) OfflineProcess(ctx context.Context, taskID int64) (*OfflineProcessResult, error)
OfflineProcess 查询图床离线迁移任务的进度。
接口: GET /api/v1/oss/offline/download/process
参数:
- taskID: OfflineDownload 返回的任务 ID。
注意: 状态枚举与云盘离线下载一致:0 进行中、1 失败、2 成功、3 重试中。
func (*OssService) UploadAsyncResult ¶
func (s *OssService) UploadAsyncResult(ctx context.Context, preuploadID string) (*OssAsyncResult, error)
UploadAsyncResult 图床异步轮询获取上传最终结果。
接口: POST /upload/v1/oss/file/upload_async_result
参数:
- preuploadID: CreateFile 返回的预上传 ID。
注意: Completed 为 false 表示尚未完成,需继续轮询,间隔至少 1 秒。
func (*OssService) UploadComplete ¶
func (s *OssService) UploadComplete(ctx context.Context, preuploadID string) (*OssUploadCompleteResult, error)
UploadComplete 通知图床所有分片上传完毕。
接口: POST /upload/v1/oss/file/upload_complete
参数:
- preuploadID: CreateFile 返回的预上传 ID。
注意: 返回 Async 为 true 时服务端仍在异步处理,需调用 UploadAsyncResult 轮询最终结果(轮询间隔至少 1 秒);否则可直接使用返回的 FileID。
func (*OssService) UploadFile ¶
func (s *OssService) UploadFile(ctx context.Context, parentFileID, filename string, r io.ReaderAt, size int64) (string, error)
UploadFile 上传图片到图床,返回文件 ID。
组合流程: 内部依次调用 CreateFile → GetUploadURL(逐片)→ PUT 分片 → UploadComplete(必要时 UploadAsyncResult 每秒轮询),无单独 HTTP 接口。
参数:
- parentFileID: 图床父目录 ID(字符串),空字符串表示根目录。
- filename: 文件名,仅支持 png/gif/jpeg/tiff/webp/jpg/tif/svg/bmp 格式。
- r: 文件内容,需支持随机读(MD5 计算与分片上传会多次读取)。
- size: 文件大小,单位字节,单图上限 100M。
注意: 秒传(Reuse)命中时直接返回已有的 FileID,不再上传分片; 相同 etag+size 视为同一张图片,重复上传会覆盖。
func (*OssService) UploadFromPath ¶
UploadFromPath 上传本地图片到图床,返回文件 ID。
组合流程: 内部依次调用 CreateFile → GetUploadURL(逐片)→ PUT 分片 → UploadComplete(必要时 UploadAsyncResult 每秒轮询),无单独 HTTP 接口。
参数:
- parentFileID: 图床父目录 ID(字符串),空字符串表示根目录。
- path: 本地文件路径,文件名取路径的最后一段。
注意: 自动完成 MD5 计算与秒传检测;仅支持 png/gif/jpeg/tiff/webp/jpg/tif/svg/bmp 格式,单图上限 100M;相同 etag+size 视为同一张图片,重复上传会覆盖。
type OssUploadCompleteResult ¶
type OssUploadCompleteResult struct {
FileID string `json:"fileID"`
// Async 为 true 时需调用 UploadAsyncResult 轮询最终结果。
Async bool `json:"async"`
Completed bool `json:"completed"`
}
OssUploadCompleteResult 是图床上传完毕的返回。
type PaidShareCreateRequest ¶
type PaidShareCreateRequest struct {
ShareName string
FileIDs []int64
PayAmount int
IsReward int
ResourceDesc string
TrafficSwitch TrafficSwitch
TrafficLimitSwitch int
TrafficLimit int64
}
PaidShareCreateRequest 是创建付费分享链接的参数。
type ResolutionsResult ¶
type ResolutionsResult struct {
// IsGetResolution 为 true 表示服务端仍在解析,需继续轮询(官方建议间隔 10s)。
IsGetResolution bool `json:"IsGetResolution"`
// Resolutions 可转码的分辨率,逗号分隔,如 "480p,720p,1080p"。
Resolutions string `json:"Resolutions"`
// NowOrFinishedResolutions 正在或已完成转码的分辨率;转码时应排除,避免重复转码。
NowOrFinishedResolutions string `json:"NowOrFinishedResolutions"`
// CodecNames 编码方式,如 "H.264"。
CodecNames string `json:"CodecNames"`
// VideoTime 视频时长,单位秒。
VideoTime int64 `json:"VideoTime"`
}
ResolutionsResult 是获取可转码分辨率接口的返回。
type Sha1ReuseResult ¶
type Sha1ReuseResult struct {
// FileID 秒传成功后的文件 ID(Reuse 为 true 时有效)。
FileID int64 `json:"fileID"`
// Reuse 为 true 表示秒传成功。
Reuse bool `json:"reuse"`
}
Sha1ReuseResult 是 sha1 秒传的返回。
type ShareCreateRequest ¶
type ShareCreateRequest struct {
ShareName string `json:"shareName"`
ShareExpire int `json:"shareExpire"`
FileIDs []int64 `json:"-"`
SharePwd string `json:"sharePwd,omitempty"`
TrafficSwitch TrafficSwitch `json:"trafficSwitch,omitempty"`
TrafficLimitSwitch int `json:"trafficLimitSwitch,omitempty"`
TrafficLimit int64 `json:"trafficLimit,omitempty"`
}
ShareCreateRequest 是创建分享链接的参数。
type ShareCreateResult ¶
ShareCreateResult 是创建分享链接的返回。
type ShareInfo ¶
type ShareInfo struct {
Expiration string `json:"expiration"`
Expired int `json:"expired"`
SharePwd string `json:"sharePwd"`
TrafficSwitch int `json:"trafficSwitch"`
TrafficLimitSwitch int `json:"trafficLimitSwitch"`
TrafficLimit int64 `json:"trafficLimit"`
BytesCharge int64 `json:"bytesCharge"`
PreviewCount int64 `json:"previewCount"`
DownloadCount int64 `json:"downloadCount"`
SaveCount int64 `json:"saveCount"`
PayAmount float64 `json:"payAmount"`
Amount float64 `json:"amount"`
OrderCnt int64 `json:"orderCnt"`
}
ShareInfo 是分享链接信息。
type ShareListResult ¶
type ShareListResult struct {
// LastShareID 为 -1 表示最后一页;否则作为下一页的翻页游标。
}
ShareListResult 是分享链接列表的返回。
type ShareService ¶
type ShareService struct {
// contains filtered or unexported fields
}
ShareService 提供分享管理相关接口:免费/付费分享链接的创建、列表与修改。
func (*ShareService) Create ¶
func (s *ShareService) Create(ctx context.Context, req *ShareCreateRequest) (*ShareCreateResult, error)
Create 创建免费分享链接,返回分享 ID 与分享码。
接口: POST /api/v1/share/create
参数说明(见 ShareCreateRequest 各字段):
- ShareName:分享链接名称,必填。
- ShareExpire:有效期天数,枚举 1、7、30、0(0 为永久),必填。
- FileIDs:分享的文件 ID 列表,必填,最多 100 个。
- SharePwd:提取码,可选,不填为公开分享。
- TrafficSwitch:分享提取流量包开关,可选,含义见 TrafficSwitch 类型。
- TrafficLimitSwitch:流量限制开关,可选:1 关闭限制;2 打开限制。
- TrafficLimit:限制流量上限,单位字节,可选。
注意事项:完整分享页面链接需按 https://{uid}.share.123pan.cn/123pan/{shareKey} 规则拼接(见 ShareURL),uid 来自 client.User.Info。
func (*ShareService) CreatePaid ¶
func (s *ShareService) CreatePaid(ctx context.Context, req *PaidShareCreateRequest) (*ShareCreateResult, error)
CreatePaid 创建付费分享链接,返回分享 ID 与分享码。
接口: POST /api/v1/share/content-payment/create
参数说明(见 PaidShareCreateRequest 各字段):
- ShareName:分享链接名称,必填,小于 35 字符且不含特殊字符。
- FileIDs:分享的文件 ID 列表,必填,最多 100 个。
- PayAmount:付费金额,必填,整数元,取值范围 1-1000。
- IsReward:是否开启打赏,0 否,1 是。
- ResourceDesc:资源描述,可选。
- TrafficSwitch:分享提取流量包开关,可选,含义见 TrafficSwitch 类型。
- TrafficLimitSwitch:流量限制开关,可选:1 关闭限制;2 打开限制。
- TrafficLimit:限制流量上限,单位字节,可选。
注意事项:完整分享页面链接拼接规则与免费分享相同(见 ShareURL)。
func (*ShareService) List ¶
func (s *ShareService) List(ctx context.Context, limit int, lastShareID int64) (*ShareListResult, error)
List 获取免费分享链接列表,按 lastShareId 游标翻页。
接口: GET /api/v1/share/list
参数说明:
- limit:每页数量,最大 100;传 0 或负数时默认按 100 请求。
- lastShareID:翻页游标,首页传 0,下一页传上一页返回的 LastShareID。
注意事项:返回的 LastShareID 为 -1 表示已到最后一页,翻页应就此结束。
func (*ShareService) ListPaid ¶
func (s *ShareService) ListPaid(ctx context.Context, limit int, lastShareID int64) (*ShareListResult, error)
ListPaid 获取付费分享链接列表,按 lastShareId 游标翻页。
接口: GET /api/v1/share/payment/list
参数说明:
- limit:每页数量,最大 100;传 0 或负数时默认按 100 请求。
- lastShareID:翻页游标,首页传 0,下一页传上一页返回的 LastShareID。
注意事项:返回的 LastShareID 为 -1 表示已到最后一页; 付费分享条目会额外返回 PayAmount、Amount、OrderCnt 等收益字段。
func (*ShareService) Update ¶
func (s *ShareService) Update(ctx context.Context, req *ShareUpdateRequest) error
Update 批量修改免费分享链接的流量设置。
接口: PUT /api/v1/share/list/info
参数说明(见 ShareUpdateRequest 各字段):
- ShareIDs:待修改的分享链接 ID 列表,必填,最多 100 个。
- TrafficSwitch:分享提取流量包开关,可选,含义见 TrafficSwitch 类型。
- TrafficLimitSwitch:流量限制开关,可选:1 关闭限制;2 打开限制。
- TrafficLimit:限制流量上限,单位字节,可选。
注意事项:仅支持修改以上三项流量相关设置, 分享名称、有效期、提取码创建后均不可修改。
func (*ShareService) UpdatePaid ¶
func (s *ShareService) UpdatePaid(ctx context.Context, req *ShareUpdateRequest) error
UpdatePaid 批量修改付费分享链接的流量设置。
接口: PUT /api/v1/share/list/payment/info
参数说明(见 ShareUpdateRequest 各字段):
- ShareIDs:待修改的分享链接 ID 列表,必填,最多 100 个。
- TrafficSwitch:分享提取流量包开关,可选,含义见 TrafficSwitch 类型。
- TrafficLimitSwitch:流量限制开关,可选:1 关闭限制;2 打开限制。
- TrafficLimit:限制流量上限,单位字节,可选。
注意事项:与 Update 相同,仅支持修改以上三项流量相关设置, 分享名称、付费金额、资源描述创建后均不可修改。
type ShareUpdateRequest ¶
type ShareUpdateRequest struct {
ShareIDs []int64 `json:"shareIdList"`
TrafficSwitch TrafficSwitch `json:"trafficSwitch,omitempty"`
TrafficLimitSwitch int `json:"trafficLimitSwitch,omitempty"`
TrafficLimit int64 `json:"trafficLimit,omitempty"`
}
ShareUpdateRequest 是修改分享链接的参数(仅支持修改流量相关设置)。
type SingleCreateResult ¶
type SingleCreateResult struct {
// FileID 上传成功后的文件 ID。
FileID int64 `json:"fileID"`
// Completed 为 true 表示上传完成。
Completed bool `json:"completed"`
}
SingleCreateResult 是单步上传的返回。
type TrafficLogEntry ¶
type TrafficLogEntry struct {
// UniqueID 记录唯一 ID。
UniqueID string `json:"uniqueID"`
// FileName 文件名称。
FileName string `json:"fileName"`
// FileSize 文件大小(字节)。
FileSize int64 `json:"fileSize"`
// FilePath 文件路径。
FilePath string `json:"filePath"`
// DirectLinkURL 直链链接。
DirectLinkURL string `json:"directLinkURL"`
// FileSource 文件来源:1 全部文件,2 图床。
FileSource int `json:"fileSource"`
// TotalTraffic 消耗流量(字节)。
TotalTraffic int64 `json:"totalTraffic"`
}
TrafficLogEntry 是直链流量日志条目。
type TrafficLogResult ¶
type TrafficLogResult struct {
// Total 记录总数。
Total int64 `json:"total"`
// List 当前页的日志条目。
List []TrafficLogEntry `json:"list"`
}
TrafficLogResult 是直链流量日志的返回。
type TrafficSwitch ¶
type TrafficSwitch int
TrafficSwitch 分享提取流量包开关。 枚举值:1 全部关闭;2 打开游客免登录提取;3 打开超流量用户提取;4 全部开启。
type TranscodeDownloadResult ¶
type TranscodeDownloadResult struct {
// DownloadURL 下载地址;转码空间已满时为空。
DownloadURL string `json:"downloadUrl"`
// IsFull 转码空间容量是否已满。
IsFull bool `json:"isFull"`
}
TranscodeDownloadResult 是转码空间下载类接口的返回。
type TranscodeFile ¶
type TranscodeFile struct {
FileName string `json:"FileName"`
// FileSize 为带单位的字符串,如 "497.17KB"。
FileSize string `json:"FileSize"`
Resolution string `json:"Resolution"`
CreateAt string `json:"CreateAt"`
// URL 播放地址,仅 m3u8 文件有值。
URL string `json:"Url"`
}
TranscodeFile 是转码产物文件。
type TranscodeRecord ¶
type TranscodeRecord struct {
CreateAt string `json:"create_at"`
Resolution string `json:"resolution"`
// Status 1:准备转码 2:正在转码中 3-254:转码失败 255:转码成功
Status int `json:"status"`
// Link 转码成功后的 m3u8 链接(仅 Status=255 时有值)。
Link string `json:"link"`
}
TranscodeRecord 是单条转码记录。
type TranscodeRequest ¶
type TranscodeRequest struct {
FileID int64 `json:"fileId"`
// CodecName 编码方式,取自 Resolutions 返回的 CodecNames。
CodecName string `json:"codecName"`
// VideoTime 视频时长(秒),取自 Resolutions 返回的 VideoTime。
VideoTime int64 `json:"videoTime"`
// Resolutions 要转码的分辨率,逗号分隔且 P 大写,如 "2160P,1080P,720P"。
// 已转码过的分辨率无需再传。
Resolutions string `json:"resolutions"`
}
TranscodeRequest 是发起视频转码的参数。
type TranscodeResult ¶
type TranscodeResult struct {
UID int64 `json:"Uid"`
Resolution string `json:"Resolution"`
// Status 1:准备转码 2:正在转码中 3-254:转码失败 255:转码成功
Status int `json:"Status"`
Files []TranscodeFile `json:"Files"`
}
TranscodeResult 是某分辨率的转码结果。
type TranscodeService ¶
type TranscodeService struct {
// contains filtered or unexported fields
}
TranscodeService 提供视频转码相关接口。
本地上传视频到转码空间:先调用 FolderInfo 获取转码空间目录 ID, 再使用 Upload.UploadFile 将视频上传到该目录。
func (*TranscodeService) CloudVideoFiles ¶
func (s *TranscodeService) CloudVideoFiles(ctx context.Context, req *FileListRequest) (*FileListResult, error)
CloudVideoFiles 获取云盘空间中的视频文件列表。
接口: GET /api/v2/file/list(固定 category=2,仅返回视频)
参数:
- req: 文件列表查询参数,见 FileListRequest(分页、目录、搜索等)。
注意: 查询结果中的文件 ID 可用于 UploadFromCloudDisk 将视频转入转码空间。
func (*TranscodeService) Delete ¶
func (s *TranscodeService) Delete(ctx context.Context, fileID int64, mode DeleteMode) error
Delete 删除转码空间中的视频。
接口: POST /api/v1/transcode/delete (QPS 10)
参数:
- fileID: 转码空间中的视频文件 ID。
- mode: 删除范围。DeleteOriginal(1) 仅删除原文件; DeleteOriginalAndTranscoded(2) 删除原文件及转码后的文件。
注意: 删除转码后文件的操作不可逆,请谨慎使用 DeleteOriginalAndTranscoded。
func (*TranscodeService) DownloadAll ¶
func (s *TranscodeService) DownloadAll(ctx context.Context, fileID int64, zipName string) (*DownloadAllResult, error)
DownloadAll 打包下载某个视频的全部转码文件(zip)。
接口: POST /api/v1/transcode/file/download/all (QPS 1)
参数:
- fileID: 转码空间中的视频文件 ID。
- zipName: 打包生成的 zip 文件名。
注意: IsDownloading 为 true 表示服务端仍在打包,需轮询,官方建议间隔 10 秒;转码空间容量已满(IsFull 为 true)时不返回下载地址;返回的 DownloadURL 中携带 access_token,日志打印时注意脱敏。
func (*TranscodeService) DownloadM3U8 ¶
func (s *TranscodeService) DownloadM3U8(ctx context.Context, fileID int64, resolution string) (*TranscodeDownloadResult, error)
DownloadM3U8 获取某分辨率 m3u8 文件的下载地址。
接口: POST /api/v1/transcode/m3u8_ts/download (QPS 20)
参数:
- fileID: 转码空间中的视频文件 ID。
- resolution: 分辨率,P 必须大写,如 "1080P"。
注意: 转码空间容量已满(IsFull 为 true)时不返回下载地址。
func (*TranscodeService) DownloadOriginal ¶
func (s *TranscodeService) DownloadOriginal(ctx context.Context, fileID int64) (*TranscodeDownloadResult, error)
DownloadOriginal 获取转码空间原文件的下载地址。
接口: POST /api/v1/transcode/file/download (QPS 10)
参数:
- fileID: 转码空间中的视频文件 ID。
注意: 转码空间容量已满(IsFull 为 true)时不返回下载地址,DownloadURL 为空。
func (*TranscodeService) DownloadTS ¶
func (s *TranscodeService) DownloadTS(ctx context.Context, fileID int64, resolution, tsName string) (*TranscodeDownloadResult, error)
DownloadTS 获取某分辨率单个 ts 分片的下载地址。
接口: POST /api/v1/transcode/m3u8_ts/download (QPS 20)
参数:
- fileID: 转码空间中的视频文件 ID。
- resolution: 分辨率,P 必须大写,如 "1080P"。
- tsName: 分片名,不含 ".ts" 后缀(Results 返回的 FileName 为 "000.ts" 时传 "000")。
注意: 转码空间容量已满(IsFull 为 true)时不返回下载地址。
func (*TranscodeService) FolderInfo ¶
func (s *TranscodeService) FolderInfo(ctx context.Context) (int64, error)
FolderInfo 获取转码空间文件夹 ID。
接口: POST /api/v1/transcode/folder/info (QPS 20)
注意: 本地上传视频到转码空间时,将返回的文件夹 ID 作为 Upload.UploadFile 的 parentFileID 使用。
func (*TranscodeService) List ¶
func (s *TranscodeService) List(ctx context.Context, fileID int64) (*VideoTranscodeList, error)
List 获取视频转码列表。
接口: GET /api/v1/video/transcode/list
参数:
- fileID: 视频文件 ID。
注意: 仅限三方挂载应用授权(OAuth)获取的 access_token 调用; 返回 Status:1 待转码、3 转码失败、254 部分成功、255 全部成功。
func (*TranscodeService) Records ¶
func (s *TranscodeService) Records(ctx context.Context, fileID int64) ([]TranscodeRecord, error)
Records 查询某个视频各分辨率的转码记录。
接口: POST /api/v1/transcode/video/record (QPS 20)
参数:
- fileID: 转码空间中的视频文件 ID。
注意: 记录状态 Status:1 准备转码、2 正在转码中、3-254 转码失败、255 转码成功; 仅 Status=255 时 Link 返回 m3u8 播放链接。
func (*TranscodeService) Resolutions ¶
func (s *TranscodeService) Resolutions(ctx context.Context, fileID int64) (*ResolutionsResult, error)
Resolutions 获取视频文件可转码的分辨率。
接口: POST /api/v1/transcode/video/resolutions (QPS 1)
参数:
- fileID: 转码空间中的视频文件 ID。
注意: 返回 IsGetResolution 为 true 表示服务端仍在解析,结果尚未就绪, 需轮询,官方建议间隔 10 秒。返回的 Resolutions 为小写(如 "1080p"), 发起转码时 P 必须转为大写(如 "1080P");NowOrFinishedResolutions 中的 分辨率正在转码或已完成,无需重复提交。
func (*TranscodeService) Results ¶
func (s *TranscodeService) Results(ctx context.Context, fileID int64) ([]TranscodeResult, error)
Results 查询某个视频的转码结果,含各分辨率的产物文件列表。
接口: POST /api/v1/transcode/video/result (QPS 20)
参数:
- fileID: 转码空间中的视频文件 ID。
注意: Status 含义同 Records:1 准备转码、2 正在转码中、3-254 转码失败、 255 转码成功。产物中仅 m3u8 文件带播放 URL,ts 分片需用 DownloadTS 获取下载地址。
func (*TranscodeService) SpaceFiles ¶
func (s *TranscodeService) SpaceFiles(ctx context.Context, req *FileListRequest) (*FileListResult, error)
SpaceFiles 获取转码空间的文件列表。
接口: GET /api/v2/file/list(固定 businessType=2,即转码空间)
参数:
- req: 文件列表查询参数,见 FileListRequest(分页、目录、搜索等)。
func (*TranscodeService) Transcode ¶
func (s *TranscodeService) Transcode(ctx context.Context, req *TranscodeRequest) error
Transcode 发起视频转码操作。
接口: POST /api/v1/transcode/video (QPS 3)
参数:
- req: 转码参数。FileID 为转码空间中的视频文件 ID;CodecName、VideoTime 取自 Resolutions 的返回;Resolutions 为要转码的分辨率,逗号分隔且 P 必须大写(如 "2160P,1080P,720P")。
注意: 已转码或转码中的分辨率(见 NowOrFinishedResolutions)无需重复提交; 转码进度可通过 Records 或 Results 查询。
func (*TranscodeService) UploadFromCloudDisk ¶
func (s *TranscodeService) UploadFromCloudDisk(ctx context.Context, fileIDs []int64) error
UploadFromCloudDisk 将云盘空间的视频文件上传(转存)到转码空间。
接口: POST /api/v1/transcode/upload/from_cloud_disk (QPS 1)
参数:
- fileIDs: 云盘视频文件 ID 列表,一次最多 100 个。
注意: 官方 QPS 限制为 1,频繁调用时需自行限流。
type UploadCompleteResult ¶
type UploadCompleteResult struct {
// Completed 为 true 表示服务端合并校验完成,上传成功。
Completed bool `json:"completed"`
// FileID 上传成功后的文件 ID(Completed 为 true 时有效)。
FileID int64 `json:"fileID"`
}
UploadCompleteResult 是上传完毕(V2)的返回。
type UploadCompleteResultV1 ¶
type UploadCompleteResultV1 struct {
// Async 为 true 时需调用 AsyncResultV1 轮询最终结果。
Async bool `json:"async"`
// Completed 为 true 表示上传完成。
Completed bool `json:"completed"`
// FileID 上传成功后的文件 ID(Completed 为 true 时有效)。
FileID int64 `json:"fileID"`
}
UploadCompleteResultV1 是上传完毕(V1)的返回。
type UploadCreateRequest ¶
type UploadCreateRequest struct {
// ParentFileID 父目录 ID,根目录为 0。
ParentFileID int64 `json:"parentFileID"`
// Filename 文件名,小于 255 字符且不能包含 "\/:*?|>< 。
// ContainDir 为 true 时传入"路径+文件名",如 /你好/123/测试文件.mp4。
Filename string `json:"filename"`
// Etag 文件 MD5。
Etag string `json:"etag"`
// Size 文件大小(字节)。
Size int64 `json:"size"`
// Duplicate 重名处理策略:0 默认,1 保留两者(自动加后缀),2 覆盖原文件。
Duplicate int `json:"duplicate,omitempty"`
// ContainDir 文件名是否携带路径,为 true 时自动创建不存在的中间目录。
ContainDir bool `json:"containDir,omitempty"`
}
UploadCreateRequest 是创建文件(预上传)的参数。
type UploadCreateResult ¶
type UploadCreateResult struct {
// FileID 秒传成功时返回的文件 ID。
FileID int64 `json:"fileID"`
// PreuploadID 预上传 ID(Reuse 为 true 时不存在),后续分片上传与完成接口凭此标识。
PreuploadID string `json:"preuploadID"`
// Reuse 为 true 表示秒传成功,上传结束。
Reuse bool `json:"reuse"`
// SliceSize 分片大小(字节),必须按此大小切分文件。
SliceSize int64 `json:"sliceSize"`
// Servers 上传域名(V2),后续上传分片必须使用其中之一。
Servers []string `json:"servers"`
}
UploadCreateResult 是创建文件(V2)的返回。
type UploadCreateResultV1 ¶
type UploadCreateResultV1 struct {
// FileID 秒传成功时返回的文件 ID。
FileID int64 `json:"fileID"`
// PreuploadID 预上传 ID(Reuse 为 true 时不存在)。
PreuploadID string `json:"preuploadID"`
// Reuse 为 true 表示秒传成功,上传结束。
Reuse bool `json:"reuse"`
// SliceSize 分片大小(字节),必须按此大小切分文件。
SliceSize int64 `json:"sliceSize"`
}
UploadCreateResultV1 是创建文件(V1 旧版)的返回。
type UploadService ¶
type UploadService struct {
// contains filtered or unexported fields
}
UploadService 提供文件上传相关接口:V2 分片上传(推荐)、单步上传、V1 旧版流程、sha1 秒传, 以及一行代码上传的高级封装 UploadFile / UploadFromPath。
V2 分片上传流程:Create(预上传,返回 Reuse 为 true 即秒传结束)→ UploadSlice(按 SliceSize 逐片上传到上传域名)→ Complete(轮询直至 Completed)。 单步上传流程(≤1GB 小文件):Domains 获取上传域名 → SingleCreate 一次上传。 V1 旧版流程:CreateV1 → GetUploadURLV1(每片换预签名 URL)→ PutSliceV1 → ListUploadPartsV1(可选比对)→ CompleteV1(Async 为 true 时转 AsyncResultV1 轮询)。
func (*UploadService) AsyncResultV1 ¶
func (s *UploadService) AsyncResultV1(ctx context.Context, preuploadID string) (*UploadCompleteResult, error)
AsyncResultV1 异步轮询获取上传结果(V1)。
接口: POST /upload/v1/file/upload_async_result
参数:
- preuploadID: CreateV1 返回的预上传 ID。
返回 Completed 为 false 时至少间隔 1 秒再调用,直至 Completed 为 true 并取得 FileID。
func (*UploadService) Complete ¶
func (s *UploadService) Complete(ctx context.Context, preuploadID string) (*UploadCompleteResult, error)
Complete 通知上传完毕(V2),是 V2 分片上传流程的最后一步。
接口: POST /upload/v2/file/upload_complete(主域名)
参数:
- preuploadID: Create 返回的预上传 ID。
返回 Completed 为 false 时表示服务端仍在合并校验,需间隔 1 秒重复调用轮询, 直至 Completed 为 true 并取得 FileID。
func (*UploadService) CompleteV1 ¶
func (s *UploadService) CompleteV1(ctx context.Context, preuploadID string) (*UploadCompleteResultV1, error)
CompleteV1 通知上传完毕(V1)。
接口: POST /upload/v1/file/upload_complete
参数:
- preuploadID: CreateV1 返回的预上传 ID。
返回 Async 为 true 时表示服务端异步合并,需转 AsyncResultV1 轮询最终结果 (间隔至少 1 秒);Completed 为 true 时直接取 FileID。
func (*UploadService) Create ¶
func (s *UploadService) Create(ctx context.Context, req *UploadCreateRequest) (*UploadCreateResult, error)
Create 创建文件(V2 预上传),是 V2 分片上传流程的第一步。
接口: POST /upload/v2/file/create(主域名)
参数:
- req: 预上传参数,见 UploadCreateRequest;Etag 为整个文件的 MD5, Size 单位字节,单文件上限 10GB。
返回 Reuse 为 true 时秒传成功、上传结束(FileID 即结果); 否则按 SliceSize 切分文件,用返回的 Servers 之一调用 UploadSlice, 全部分片传完后调用 Complete。
func (*UploadService) CreateV1 ¶
func (s *UploadService) CreateV1(ctx context.Context, req *UploadCreateRequest) (*UploadCreateResultV1, error)
CreateV1 创建文件(V1 旧版预上传)。推荐使用 Create(V2)。
接口: POST /upload/v1/file/create
参数:
- req: 预上传参数,见 UploadCreateRequest;Etag 为整个文件的 MD5。
返回 Reuse 为 true 时秒传成功;否则按 SliceSize 切分,逐片经 GetUploadURLV1 换取预签名地址并 PutSliceV1 上传,最后调用 CompleteV1。
func (*UploadService) Domains ¶
func (s *UploadService) Domains(ctx context.Context) ([]string, error)
Domains 获取单步上传的上传域名列表,是单步上传流程的第一步。
接口: GET /upload/v2/file/domain
返回的域名任选其一作为 SingleCreate 的 server 参数。
func (*UploadService) GetUploadURLV1 ¶
func (s *UploadService) GetUploadURLV1(ctx context.Context, preuploadID string, sliceNo int64) (string, error)
GetUploadURLV1 获取分片的预签名上传地址(V1)。每个分片都需单独换取。
接口: POST /upload/v1/file/get_upload_url
参数:
- preuploadID: CreateV1 返回的预上传 ID。
- sliceNo: 分片编号,从 1 开始。
返回的预签名地址交给 PutSliceV1 上传分片内容。
func (*UploadService) ListUploadPartsV1 ¶
func (s *UploadService) ListUploadPartsV1(ctx context.Context, preuploadID string) ([]UploadedPart, error)
ListUploadPartsV1 列举已上传分片(V1,非必需步骤),用于本地 MD5 比对校验。
接口: POST /upload/v1/file/list_upload_parts
参数:
- preuploadID: CreateV1 返回的预上传 ID。
注意:文件小于 sliceSize(即未真正分片)时返回空列表。
func (*UploadService) PutSliceV1 ¶
func (s *UploadService) PutSliceV1(ctx context.Context, presignedURL string, slice io.Reader, size int64) error
PutSliceV1 向预签名地址 PUT 上传分片二进制(V1)。
接口: PUT {presignedURL}(预签名地址,非开放平台域名)
参数:
- presignedURL: GetUploadURLV1 返回的预签名上传地址。
- slice: 分片内容。
- size: 分片字节数,用于设置 Content-Length。
注意:此请求不携带 Authorization/Platform 头(官方要求), Content-Type 为 application/octet-stream。
func (*UploadService) Sha1Reuse ¶
func (s *UploadService) Sha1Reuse(ctx context.Context, parentFileID int64, filename, sha1 string, size int64, duplicate int) (*Sha1ReuseResult, error)
Sha1Reuse 通过文件 sha1 尝试秒传。
接口: POST /upload/v2/file/sha1_reuse
参数:
- parentFileID: 父目录 ID,根目录为 0。
- filename: 文件名,小于 255 字符且不能包含 "\/:*?|>< 。
- sha1: 整个文件的 SHA1(注意:此接口用 SHA1,其余上传接口均用 MD5)。
- size: 文件大小(字节)。
- duplicate: 重名处理策略:0 默认,1 保留两者(自动加后缀),2 覆盖原文件。
返回 Reuse 为 false 时表示服务端无此文件,需改走正常上传流程(Create 或 SingleCreate)。
func (*UploadService) SingleCreate ¶
func (s *UploadService) SingleCreate(ctx context.Context, server string, req *UploadCreateRequest, file io.Reader) (*SingleCreateResult, error)
SingleCreate 单步上传:一次 multipart 请求完成小文件上传。
接口: POST {server}/upload/v2/file/single/create(上传域名,非主域名)
参数:
- server: 上传域名,取 Domains 返回的域名之一。
- req: 上传参数,见 UploadCreateRequest;Etag 为整个文件的 MD5。
- file: 文件内容,单文件上限 1GB;更大文件请走 Create 分片上传(上限 10GB)。
func (*UploadService) UploadFile ¶
func (s *UploadService) UploadFile(ctx context.Context, parentFileID int64, filename string, r io.ReaderAt, size int64) (int64, error)
UploadFile 上传文件到指定目录,返回文件 ID。
接口: 组合调用 V2 分片上传流程 POST /upload/v2/file/create → POST {server}/upload/v2/file/slice → POST /upload/v2/file/upload_complete
参数:
- parentFileID: 目标目录 ID,根目录为 0。
- filename: 文件名,小于 255 字符且不能包含 "\/:*?|>< 。
- r: 文件内容,需要支持随机读(*os.File、*bytes.Reader 等均满足)。
- size: 文件总大小(字节),单文件上限 10GB。
自动完成:MD5 计算、秒传检测(Reuse 命中即直接返回)、分片并发上传 (并发数 3)、Complete 轮询(间隔 1 秒)直至服务端合并完成。
func (*UploadService) UploadFromPath ¶
func (s *UploadService) UploadFromPath(ctx context.Context, parentFileID int64, path string) (int64, error)
UploadFromPath 上传本地文件到指定目录,返回文件 ID。
接口: 组合调用 V2 分片上传流程(Create → UploadSlice → Complete),见 UploadFile
参数:
- parentFileID: 目标目录 ID,根目录为 0。
- path: 本地文件路径,文件名取自路径的 basename;单文件上限 10GB。
自动完成:MD5 计算、秒传检测、按服务端分片大小切分并发上传、轮询完成。
func (*UploadService) UploadSlice ¶
func (s *UploadService) UploadSlice(ctx context.Context, server, preuploadID string, sliceNo int64, sliceMD5 string, slice io.Reader) error
UploadSlice 上传单个分片(V2),multipart/form-data 格式。
接口: POST {server}/upload/v2/file/slice(上传域名,非主域名)
参数:
- server: 上传域名,取 Create 返回的 Servers 之一。
- preuploadID: Create 返回的预上传 ID。
- sliceNo: 分片编号,从 1 开始。
- sliceMD5: 该分片内容的 MD5。
- slice: 分片内容,长度须等于 Create 返回的 SliceSize(末片可小于)。
type UploadedPart ¶
type UploadedPart struct {
// PartNumber 分片编号(服务端可能返回字符串,用 json.Number 兼容)。
PartNumber json.Number `json:"partNumber"`
// Size 分片大小(字节)。
Size int64 `json:"size"`
// Etag 分片 MD5,可与本地计算值比对校验。
Etag string `json:"etag"`
}
UploadedPart 是已上传分片信息(V1)。
type UserInfo ¶
type UserInfo struct {
// UID 用户账号 ID,也用于拼接分享链接(见 ShareURL)。
UID int64 `json:"uid"`
// Nickname 昵称。
Nickname string `json:"nickname"`
// HeadImage 头像地址。
HeadImage string `json:"headImage"`
// Passport 手机号码。
Passport string `json:"passport"`
// Mail 邮箱。
Mail string `json:"mail"`
// SpaceUsed 已用空间(字节)。
SpaceUsed int64 `json:"spaceUsed"`
// SpacePermanent 永久空间(字节)。
SpacePermanent int64 `json:"spacePermanent"`
// SpaceTemp 临时空间(字节)。
SpaceTemp int64 `json:"spaceTemp"`
// SpaceTempExpr 临时空间到期日(文档标 string,实际可能返回数字,用 RawMessage 兼容)。
SpaceTempExpr json.RawMessage `json:"spaceTempExpr"`
// Vip 是否为会员。
Vip bool `json:"vip"`
// DirectTraffic 剩余直链流量(字节)。
DirectTraffic int64 `json:"directTraffic"`
// IsHideUID 直链链接是否隐藏 UID。
IsHideUID bool `json:"isHideUID"`
// HTTPSCount https 数量。
HTTPSCount int `json:"httpsCount"`
// VipInfoList 会员信息,非会员为 nil。
VipInfoList []VipInfo `json:"vipInfo"`
// DeveloperInfo 开发者权益信息。
DeveloperInfo *DeveloperInfo `json:"developerInfo"`
}
UserInfo 是用户信息。
type UserService ¶
type UserService struct {
// contains filtered or unexported fields
}
UserService 提供用户信息接口。
type VideoTranscodeItem ¶
type VideoTranscodeItem struct {
URL string `json:"url"`
Resolution string `json:"resolution"`
Duration float64 `json:"duration"`
Height int `json:"height"`
Status int `json:"status"`
MC string `json:"mc"`
BitRate int64 `json:"bitRate"`
Progress int `json:"progress"`
UpdateAt string `json:"updateAt"`
}
VideoTranscodeItem 是三方挂载应用授权场景的转码列表项。
type VideoTranscodeList ¶
type VideoTranscodeList struct {
// Status 转码状态:1 待转码;3 转码失败;254 部分成功;255 全部成功。
Status int `json:"status"`
List []VideoTranscodeItem `json:"list"`
}
VideoTranscodeList 是三方挂载应用授权场景的转码列表返回。
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
pan123
command
pan123 是 123 云盘开放平台的命令行工具。
|
pan123 是 123 云盘开放平台的命令行工具。 |
|
examples
|
|
|
download
command
download 演示:获取下载直链并保存文件到本地。
|
download 演示:获取下载直链并保存文件到本地。 |
|
imagebed
command
imagebed 演示:上传本地图片到图床并获取外链。
|
imagebed 演示:上传本地图片到图床并获取外链。 |
|
offline
command
offline 演示:创建离线下载任务并轮询进度直到完成。
|
offline 演示:创建离线下载任务并轮询进度直到完成。 |
|
quickstart
command
quickstart 演示:创建客户端、获取用户信息、列出根目录文件。
|
quickstart 演示:创建客户端、获取用户信息、列出根目录文件。 |
|
share
command
share 演示:创建分享链接并拼接可访问的分享地址。
|
share 演示:创建分享链接并拼接可访问的分享地址。 |
|
upload
command
upload 演示:一行代码上传本地文件(自动 MD5、秒传检测、分片并发上传、轮询完成)。
|
upload 演示:一行代码上传本地文件(自动 MD5、秒传检测、分片并发上传、轮询完成)。 |