-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapi-fs.go
542 lines (447 loc) · 16 KB
/
api-fs.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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
package mopan
import (
"strconv"
)
type (
IconBase struct {
Icon struct {
SmallURL string `json:"smallUrl,omitempty"` // icon:1|3|5|7|9|11|13|15
MediumUrl string `json:"mediumUrl,omitempty"` // icon:2|3|6|7|10|11|14|15
LargeUrl string `json:"largeUrl,omitempty"` // icon:4|5|6|7|12|13|14|15
Max600 string `json:"max600,omitempty"` // icon:8|9|10|11|12|13|14|15
} `json:"icon,omitempty"`
}
Folder struct {
ID String `json:"id"` // 文件夹ID
ParentID String `json:"parentId"` // 文件夹父ID
Name string `json:"name"` // 名称
FileListSize Int `json:"fileListSize"` // 列表大小
IsCollect bool `json:"isCollect"` // 是否收藏
Rev Time2 `json:"rev"` // 查询时间
CreateDate Time1 `json:"createDate"` // 创建时间
LastOpTime Time1 `json:"lastOpTime"` // 修改时间
// 未知作用
StarLabel Int `json:"starLabel"`
FileCata Int `json:"fileCata"`
}
File struct {
ID String `json:"id"`
Name string `json:"name"` // 文件名
Size Int64 `json:"size"` // 文件大小
Md5 string `json:"md5"`
IconBase
MediaType int `json:"mediaType"` // 媒体类型
IsCollect bool `json:"isCollect"` // 是否收藏
IsJuBao bool `json:"isJuBao"` // 被举报??
Rev Time2 `json:"rev"` // 查询时间
CreateDate Time1 `json:"createDate"`
LastOpTime Time1 `json:"lastOpTime"`
// 未知作用
StarLabel int `json:"starLabel"`
FileCata int `json:"fileCata"`
Orientation int `json:"orientation,omitempty"`
}
FolderInfo struct {
FileID String `json:"fileId"` // 文件夹ID
ParentID String `json:"parentId"` // 父ID
FileName string `json:"fileName"` // 文件夹名称
FilePath string `json:"filePath"` // 文件夹路径
Rev Time2 `json:"rev"` // 查询时间
CreateTime Time3 `json:"createTime"` // 创建时间
CreateDate Time1 `json:"createDate"` // 创建时间
LastOpTime Time3 `json:"lastOpTime"` // 修改时间
LastOpTimeStr Time1 `json:"lastOpTimeStr"` // 修改时间
IsCollect bool `json:"isCollect"` // 是否收藏
}
FileInfo struct {
ID String `json:"id"` // 文件ID
ParentID String `json:"parentId"` // 父ID
Name string `json:"name"` // 文件名
Size Int64 `json:"size"` // 文件大小
Md5 string `json:"md5"`
NickName string `json:"nickName"` // 用户名称
FilePath string `json:"filePath"` // 文件路径
IconBase
FileDownloadURL string `json:"fileDownloadUrl"` // 下载链接
MediaType int `json:"mediaType"` // 媒体类型
IsCollect bool `json:"isCollect"` // 是否收藏
IsJuBao bool `json:"isJuBao"` // 被举报??
Rev Time2 `json:"rev"` // 查询时间
CreateDate Time1 `json:"createDate"` // 创建时间
LastOpTime Time3 `json:"lastOpTime"` // 修改时间
LastOpTimeStr Time1 `json:"lastOpTimeStr"` // 修改时间
ShootTime Time1 `json:"shootTime,omitempty"` // 拍摄时间
}
)
type UserCloudStorageData struct {
ID string `json:"id"` // 数据库ID
FolderID string `json:"folderId"` // 目录ID
Name string `json:"name"` // 名称
CatalogueType int `json:"catalogueType"` // 分类 (1:文件|私密空间,2:相册,4:视频,5:音频,6:文档,9:同步盘)
CloudType int `json:"cloudType"` // (1:普通文件,2:私密空间)
FileOrAlbum int `json:"fileOrAlbum"` // 文件或相册(1:文件,2:相册)
Path string `json:"path"` // 路径
UserID string `json:"userId"` // 用户ID
CreateTime string `json:"createTime"` // 创建时间
UpdateTime string `json:"updateTime"` // 更新时间
IsDel Bool `json:"isDel"` // 软删除
}
// 查询所有用户空间
func (c *MoClient) QueryUserCloudStorage(option ...RestyOption) ([]UserCloudStorageData, error) {
var resp []UserCloudStorageData
_, err := c.Request(MoPanProxyFamily+"/user/cloudStorage/getByUserId", Json{
"type": 2,
}, &resp, option...)
if err != nil {
return nil, err
}
return resp, nil
}
type SearchFileData struct {
Count int `json:"count"`
FolderList Folder `json:"folderList"`
FileList File `json:"fileList"`
}
// 搜索文件、文件夹
func (c *MoClient) SearchFiles(filename, folderId string, pageNum int, paramOption []ParamOption, option ...RestyOption) (*SearchFileData, error) {
param := Json{
"filename": filename,
"folderId": folderId,
"recursive": 1, // 递归查找
"pageNum": pageNum,
"source": 1, // (个人:1,分享:2)
"type": 1,
}
QueryFileOptionFileType(AllType)(param)
QueryFileOptionSort(S_FileName, true)(param)
QueryFileOptionPageSize(1024)(param)
QueryFileOptionMediaAttr(true)(param)
QueryFileOptionIconOption(1)(param)
ApplyParamOption(param, paramOption...)
var resp SearchFileData
_, err := c.Request(MoPanProxyFamily+"/file/searchFiles", param, &resp, option...)
if err != nil {
return nil, err
}
return &resp, nil
}
type QueryFilesData struct {
LastRev Time2 `json:"lastRev"` // 查询时间
FileListAO struct {
FileListSize int `json:"fileListSize"` // 返回文件(非文件夹)数量
Count int `json:"count"` // 所有文件/文件夹数量
FolderList []Folder `json:"folderList"`
FileList []File `json:"fileList"`
} `json:"fileListAO"`
}
// 查询文件、文件夹
// 当folderId == -11时列出所有文件夹
func (c *MoClient) QueryFiles(folderId string, pageNum int, paramOption []ParamOption, option ...RestyOption) (*QueryFilesData, error) {
param := Json{
"folderId": folderId, // 目录ID
"pageNum": strconv.Itoa(pageNum), // 页数
"source": 1, // (个人:1,分享:2)
"type": 1,
"remark": 60,
}
QueryFileOptionFileType(AllType)(param)
QueryFileOptionSort(S_FileName, true)(param)
QueryFileOptionPageSize(1024)(param)
QueryFileOptionMediaAttr(true)(param)
QueryFileOptionIconOption(1)(param)
ApplyParamOption(param, paramOption...)
var resp QueryFilesData
_, err := c.Request(MoPanProxyFamily+"/file/listFiles", param, &resp, option...)
if err != nil {
return nil, err
}
return &resp, nil
}
// 获取文件详细信息
// 可用选项 QueryFileOptionIconOption QueryFileOptionMediaAttr QueryFileOptionShareFile
func (c *MoClient) GetFileInfo(fileId string, paramOption []ParamOption, option ...RestyOption) (*FileInfo, error) {
param := Json{
"fileId": fileId,
"source": 1, // (个人:1,共享:2)
"type": 1,
}
QueryFileOptionMediaAttr(true)(param)
QueryFileOptionIconOption(1)(param)
ApplyParamOption(param, paramOption...)
var file FileInfo
_, err := c.Request(MoPanProxyFamily+"/file/getFileInfo", param, &file, option...)
if err != nil {
return nil, err
}
return &file, nil
}
// 获取文件详细信息
func (c *MoClient) GetFolderInfo(folderId string, paramOption []ParamOption, option ...RestyOption) (*FolderInfo, error) {
param := Json{
"folderId": folderId,
"source": 1, // (个人:1,共享:2)
"type": 1,
}
ApplyParamOption(param, paramOption...)
var folder FolderInfo
_, err := c.Request(MoPanProxyFamily+"/file/getFolderInfo", param, &folder, option...)
if err != nil {
return nil, err
}
return &folder, nil
}
// 创建文件夹
func (c *MoClient) CreateFolder(folderName, parentFolderId string, paramOption []ParamOption, option ...RestyOption) (*Folder, error) {
param := Json{
"folderName": folderName,
"parentFolderId": parentFolderId,
"relativePath": "/", // 相当于MkdirAll(/{relativePath}/{folderName})
"source": 1,
}
ApplyParamOption(param, paramOption...)
var resp Folder
_, err := c.Request(MoPanProxyFamily+"/file/createFolder", param, &resp, option...)
if err != nil {
return nil, err
}
return &resp, nil
}
// 创建文件夹(不检查是否存在)
func (c *MoClient) CreateFolderNotCheck(folderName, parentFolderId string, paramOption []ParamOption, option ...RestyOption) (*Folder, error) {
param := Json{
"folderName": folderName,
"parentFolderId": parentFolderId,
"relativePath": "/", // 相当于MkdirAll(/{relativePath}/{folderName})
"source": 1,
}
ApplyParamOption(param, paramOption...)
var resp Folder
_, err := c.Request(MoPanProxyFamily+"/file/createFolderNotCheck", param, &resp, option...)
if err != nil {
return nil, err
}
return &resp, nil
}
type RenameFileData struct {
ID string `json:"id"`
Name string `json:"name"`
Md5 string `json:"md5"`
Size Int64 `json:"size"`
FileCata int `json:"fileCata"`
MediaType int `json:"mediaType"`
Rev Time2 `json:"rev"` // 查询时间
CreateDate Time1 `json:"createDate"` // 创建时间
LastOpTime Time1 `json:"lastOpTime"` // 修改时间
}
// 重命名文件
func (c *MoClient) RenameFile(fileID, fileName string, paramOption []ParamOption, option ...RestyOption) (*RenameFileData, error) {
param := Json{
"fileId": fileID,
"destFileName": fileName,
"source": 1,
}
ApplyParamOption(param, paramOption...)
var resp RenameFileData
_, err := c.Request(MoPanProxyFamily+"/file/renameFile", param, &resp, option...)
if err != nil {
return nil, err
}
return &resp, nil
}
type RenameFolderData struct {
ID string `json:"id"`
ParentID string `json:"parentId"`
Name string `json:"name"`
FileListSize int `json:"fileListSize"`
FileCata int `json:"fileCata"`
Rev Time2 `json:"rev"` // 查询时间
CreateDate Time1 `json:"createDate"` // 创建时间
LastOpTime Time1 `json:"lastOpTime"` // 修改时间
}
// 重命名文件夹
func (c *MoClient) RenameFolder(fileID, fileName string, paramOption []ParamOption, option ...RestyOption) (*RenameFolderData, error) {
param := Json{
"folderId": fileID,
"destFolderName": fileName,
"source": 1,
}
ApplyParamOption(param, paramOption...)
var resp RenameFolderData
_, err := c.Request(MoPanProxyFamily+"/file/renameFolder", param, &resp, option...)
if err != nil {
return nil, err
}
return &resp, nil
}
type DeleteTaskData struct {
NotDeleteFileIds []string `json:"notDeleteFileIds"`
TaskBaseInfo
}
// 删除文件到回收站
func (c *MoClient) DeleteToRecycle(file []TaskFileParam, paramOption []ParamOption, option ...RestyOption) (*DeleteTaskData, error) {
param := Json{
"source": 1,
"type": 1,
"taskInfos": file,
}
ApplyParamOption(param, paramOption...)
var resp DeleteTaskData
_, err := c.Request(MoPanProxyFamily+"/recycle/deleteToRecycle", param, &resp, option...)
if err != nil {
return nil, err
}
return &resp, nil
}
type GetFileDownloadUrlData struct {
DownloadUrl string `json:"downloadUrl"`
FileID string `json:"fileId"`
}
// 获取下载链接
func (c *MoClient) GetFileDownloadUrl(fileID string, paramOption []ParamOption, option ...RestyOption) (*GetFileDownloadUrlData, error) {
param := Json{
"fileId": fileID,
"forcedGet": 0, // 强制获取
"ifShort": false,
"limitRate": "10485760",
"source": 1,
//"shareId": "",
}
ApplyParamOption(param, paramOption...)
var resp GetFileDownloadUrlData
_, err := c.Request(MoPanProxyFamily+"/file/getFileDownloadUrl", param, &resp, option...)
if err != nil {
return nil, err
}
return &resp, nil
}
type (
TaskType string
TaskFileParam struct {
FileID string `json:"fileId"`
IsFolder bool `json:"isFolder"`
FileName string `json:"fileName"`
}
// 批量任务信息
TaskStatus struct {
TaskID string `json:"taskId"` // 任务ID
TaskStatus int `json:"taskStatus"` // 任务状态(1-4,4:完成,2:存在冲突)
SubTaskCount int `json:"subTaskCount"` // 任务数量
SuccessedCount int `json:"successedCount"` // 成功数量
FailedCount int `json:"failedCount"` // 失败数量
SkipCount int `json:"skipCount"` // 跳过数量
SuccessedFileIDList []string `json:"successedFileIdList"` // 成功文件ID
SuccessedFileIdMap map[string]string `json:"successedFileIdMap,omitempty"` // only copy
}
TaskParam struct {
UserOrCloudID string `json:"userOrCloudId"` // 用户ID或共享空间ID
Source int `json:"source"` // (1:用户,2:共享)
TaskType TaskType `json:"taskType"` // 操作
TargetUserOrCloudID string `json:"targetUserOrCloudId"` // 目标用户ID或共享空间ID
TargetSource int `json:"targetSource"` // 目标 (1:用户,2:共享)
TargetType int `json:"targetType"` // 1
TargetFolderID string `json:"targetFolderId"` // 目标文件夹
TaskStatusDetailDTOList []TaskFileParam `json:"taskStatusDetailDTOList"`
}
TaskCheckParam struct {
TaskId string `json:"taskId"`
TaskType TaskType `json:"taskType"` // 操作
TargetType int `json:"targetType"` // 1
TargetFolderID string `json:"targetFolderId"` // 目标文件夹
TargetSource int `json:"targetSource"` // 目标 (1:用户,2:共享)
TargetUserOrCloudID string `json:"targetUserOrCloudId"` // 目标用户ID或共享空间ID
}
TaskManageFileParam struct {
DealWay int `json:"dealWay"` // 处理方法(1:跳过,2:同时存在,3:覆盖)
TaskFileParam
}
TaskManageParam struct {
TaskID string `json:"taskId"`
TaskType TaskType `json:"taskType"` // 操作
TargetFolderID string `json:"targetFolderId"` // 目标文件夹
Type int `json:"type"` // 1
TaskInfos []TaskManageFileParam `json:"taskInfos"`
}
TaskBaseInfo struct {
TaskIDList []string `json:"taskIdList"`
TaskType TaskType `json:"taskType"`
}
TaskData struct {
TargetFolderID string `json:"targetFolderId"`
TaskBaseInfo
}
)
const (
TASK_COPY TaskType = "COPY"
TASK_MOVE TaskType = "MOVE"
TASK_SHARE_SAVE TaskType = "SHARE_SAVE"
TASK_DELETE TaskType = "DELETE"
)
// 检查批量任务状态
func (c *MoClient) CheckBatchTask(task TaskCheckParam, option ...RestyOption) (*TaskStatus, error) {
var param Json
data, err := c.Client.JSONMarshal(task)
if err != nil {
return nil, err
}
c.Client.JSONUnmarshal(data, ¶m)
var resp TaskStatus
_, err = c.Request(MoPanProxyFamily+"/task/status/checkBatchTask", param, &resp, option...)
if err != nil {
return nil, err
}
return &resp, nil
}
// 增加批量任务
func (c *MoClient) AddBatchTask(task TaskParam, option ...RestyOption) (*TaskData, error) {
var param Json
data, err := c.Client.JSONMarshal(task)
if err != nil {
return nil, err
}
c.Client.JSONUnmarshal(data, ¶m)
var resp TaskData
_, err = c.Request(MoPanProxyFamily+"/task/status/addTask", param, &resp, option...)
if err != nil {
return nil, err
}
return &resp, nil
}
// 取消批量任务
func (c *MoClient) CancelBatchTask(taskId string, taskType TaskType, option ...RestyOption) error {
_, err := c.Request(MoPanProxyFamily+"/task/status/cancelBatchTask", Json{
"taskId": taskId,
"taskType": taskType,
}, nil, option...)
if err != nil {
return err
}
return nil
}
type GetConflictTaskInfoData struct {
TaskID string `json:"taskId"`
TaskInfos string `json:"taskInfos"`
}
// 获取任务冲突信息
func (c *MoClient) GetConflictTaskInfo(taskID string, taskType TaskType, option ...RestyOption) (*GetConflictTaskInfoData, error) {
param := Json{
"taskId": taskID,
"taskType": taskType,
}
var resp GetConflictTaskInfoData
_, err := c.Request(MoPanProxyFamily+"/task/status/getConflictTaskInfo", param, &resp, option...)
if err != nil {
return nil, err
}
return &resp, nil
}
// 处理冲突任务
func (c *MoClient) ManageBatchTask(task TaskManageParam, option ...RestyOption) error {
var param Json
data, err := c.Client.JSONMarshal(task)
if err != nil {
return err
}
c.Client.JSONUnmarshal(data, ¶m)
_, err = c.Request(MoPanProxyFamily+"/task/status/manageBatchTask", param, nil, option...)
return err
}