-
Notifications
You must be signed in to change notification settings - Fork 1
/
baidupcs.go
133 lines (118 loc) · 3.65 KB
/
baidupcs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package baidupcs
import (
"fmt"
"github.com/iikira/BaiduPCS-Go/pcsconfig"
"github.com/iikira/BaiduPCS-Go/requester"
"net/http"
"net/http/cookiejar"
"net/url"
)
const (
// OperationQuotaInfo 获取当前用户空间配额信息
OperationQuotaInfo = "获取当前用户空间配额信息"
// OperationFilesDirectoriesBatchMeta 获取文件/目录的元信息
OperationFilesDirectoriesBatchMeta = "获取文件/目录的元信息"
// OperationFilesDirectoriesList 获取目录下的文件列表
OperationFilesDirectoriesList = "获取目录下的文件列表"
// OperationRemove 删除文件/目录
OperationRemove = "删除文件/目录"
// OperationMkdir 创建目录
OperationMkdir = "创建目录"
// OperationRename 重命名文件/目录
OperationRename = "重命名文件/目录"
// OperationCopy 拷贝文件/目录
OperationCopy = "拷贝文件/目录"
// OperationMove 移动文件/目录
OperationMove = "移动文件/目录"
// OperationRapidUpload 秒传文件
OperationRapidUpload = "秒传文件"
// OperationUpload 上传单个文件
OperationUpload = "上传单个文件"
// OperationUploadTmpFile 分片上传—文件分片及上传
OperationUploadTmpFile = "分片上传—文件分片及上传"
// OperationUploadCreateSuperFile 分片上传—合并分片文件
OperationUploadCreateSuperFile = "分片上传—合并分片文件"
// OperationFileDownload 下载单个文件
OperationFileDownload = "下载单个文件"
// OperationStreamFileDownload 下载流式文件
OperationStreamFileDownload = "下载流式文件"
// OperationCloudDlAddTask 添加离线下载任务
OperationCloudDlAddTask = "添加离线下载任务"
// OperationCloudDlQueryTask 精确查询离线下载任务
OperationCloudDlQueryTask = "精确查询离线下载任务"
// OperationCloudDlListTask 查询离线下载任务列表
OperationCloudDlListTask = "查询离线下载任务列表"
// OperationCloudDlCancelTask 取消离线下载任务
OperationCloudDlCancelTask = "取消离线下载任务"
// OperationCloudDlDeleteTask 删除离线下载任务
OperationCloudDlDeleteTask = "删除离线下载任务"
)
var (
// AppID 百度 PCS 应用 ID
AppID int
)
// BaiduPCS 百度 PCS API 详情
type BaiduPCS struct {
url *url.URL
client *requester.HTTPClient // http 客户端
}
// NewPCS 提供 百度BDUSS, 返回 PCSApi 指针对象
func NewPCS(bduss string) *BaiduPCS {
client := requester.NewHTTPClient()
client.UserAgent = pcsconfig.Config.UserAgent
pcsURL := &url.URL{
Scheme: "http",
Host: "pcs.baidu.com",
}
cookie := &http.Cookie{
Name: "BDUSS",
Value: bduss,
}
jar, _ := cookiejar.New(nil)
jar.SetCookies(pcsURL, []*http.Cookie{
cookie,
})
jar.SetCookies((&url.URL{
Scheme: "http",
Host: "pan.baidu.com",
}), []*http.Cookie{
cookie,
})
client.SetCookiejar(jar)
return &BaiduPCS{
url: pcsURL,
client: client,
}
}
func (pcs *BaiduPCS) setPCSURL(subPath, method string, param ...map[string]string) {
pcs.url = &url.URL{
Scheme: "http",
Host: "pcs.baidu.com",
Path: "/rest/2.0/pcs/" + subPath,
}
uv := pcs.url.Query()
uv.Set("app_id", fmt.Sprint(pcsconfig.Config.AppID))
uv.Set("method", method)
for k := range param {
for k2 := range param[k] {
uv.Set(k2, param[k][k2])
}
}
pcs.url.RawQuery = uv.Encode()
}
func (pcs *BaiduPCS) setPCSURL2(subPath, method string, param ...map[string]string) {
pcs.url = &url.URL{
Scheme: "http",
Host: "pan.baidu.com",
Path: "/rest/2.0/" + subPath,
}
uv := pcs.url.Query()
uv.Set("app_id", "250528")
uv.Set("method", method)
for k := range param {
for k2 := range param[k] {
uv.Set(k2, param[k][k2])
}
}
pcs.url.RawQuery = uv.Encode()
}