You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

JCS_pub_API.md 35 kB

4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543
  1. # JCS-pub API
  2. **跳转回[README.md](../README.md)**
  3. ## 1 桶相关
  4. ### 1.1 创建桶
  5. <table class="api-doc-table" >
  6. <tr>
  7. <th colspan="3">请求</th>
  8. </tr>
  9. <tr>
  10. <td>POST</td>
  11. <td>application/json</td>
  12. <td>/v1/bucket/create</td>
  13. </tr>
  14. <tr>
  15. <td>Query</td>
  16. <td colspan="2">无</td>
  17. </tr>
  18. <tr>
  19. <td>Body</td>
  20. <td colspan="2">
  21. <pre>{
  22. "userID": 1,
  23. "name": "bkt1" // 桶名
  24. }</pre>
  25. </td>
  26. </tr>
  27. <tr>
  28. <th colspan="3">响应示例</th>
  29. </tr>
  30. <tr>
  31. <td colspan="3">
  32. <pre>{
  33. "code": "OK",
  34. "message": "",
  35. "data": {
  36. "bucket": {
  37. "bucketID": 1, // 桶ID
  38. "name": "bkt1" // 桶名
  39. }
  40. }
  41. }</pre>
  42. </td>
  43. </tr>
  44. </table>
  45. ### 1.2 根据名字查询桶
  46. <table class="api-doc-table" >
  47. <tr>
  48. <th colspan="3">请求</th>
  49. </tr>
  50. <tr>
  51. <td>GET</td>
  52. <td>application/json</td>
  53. <td>/v1/bucket/getByName</td>
  54. </tr>
  55. <tr>
  56. <td>Query</td>
  57. <td colspan="2">
  58. <p>&#45; name:string // 桶名</p>
  59. </td>
  60. </tr>
  61. <tr>
  62. <td>Body</td>
  63. <td colspan="2">无</td>
  64. </tr>
  65. <tr>
  66. <th colspan="3">响应示例</th>
  67. </tr>
  68. <tr>
  69. <td colspan="3">
  70. <pre>{
  71. "code": "OK",
  72. "message": "",
  73. "data": {
  74. "bucket": {
  75. "bucketID": 1, // 桶ID
  76. "name": "bkt1" // 桶名
  77. }
  78. }
  79. }</pre>
  80. </td>
  81. </tr>
  82. </table>
  83. ### 1.3 查询所有桶
  84. <table class="api-doc-table" >
  85. <tr>
  86. <th colspan="3">请求</th>
  87. </tr>
  88. <tr>
  89. <td>GET</td>
  90. <td>application/json</td>
  91. <td>/v1/bucket/listAll</td>
  92. </tr>
  93. <tr>
  94. <td>Query</td>
  95. <td colspan="2">无</td>
  96. </tr>
  97. <tr>
  98. <td>Body</td>
  99. <td colspan="2">无</td>
  100. </tr>
  101. <tr>
  102. <th colspan="3">响应示例</th>
  103. </tr>
  104. <tr>
  105. <td colspan="3">
  106. <pre>{
  107. "code": "OK",
  108. "message": "",
  109. "data": {
  110. "buckets": [{
  111. "bucketID": 1, // 桶ID
  112. "name": "bkt1" // 桶名
  113. }]
  114. }
  115. }</pre>
  116. </td>
  117. </tr>
  118. </table>
  119. ### 1.4 删除桶
  120. <table class="api-doc-table" >
  121. <tr>
  122. <th colspan="3">请求</th>
  123. </tr>
  124. <tr>
  125. <td>POST</td>
  126. <td>application/json</td>
  127. <td>/v1/bucket/delete</td>
  128. </tr>
  129. <tr>
  130. <td>Query</td>
  131. <td colspan="2">无</td>
  132. </tr>
  133. <tr>
  134. <td>Body</td>
  135. <td colspan="2">
  136. <pre>{
  137. "bucketID":1
  138. }</pre>
  139. </td>
  140. </tr>
  141. <tr>
  142. <th colspan="3">响应示例</th>
  143. </tr>
  144. <tr>
  145. <td colspan="3">
  146. <pre>{
  147. "code": "OK",
  148. "message": "",
  149. "data": null
  150. }</pre>
  151. </td>
  152. </tr>
  153. </table>
  154. ## 2 包相关
  155. ### 2.1 创建包
  156. <table class="api-doc-table" >
  157. <tr>
  158. <th colspan="3">请求</th>
  159. </tr>
  160. <tr>
  161. <td>POST</td>
  162. <td>application/json</td>
  163. <td>/v1/package/create</td>
  164. </tr>
  165. <tr>
  166. <td>Query</td>
  167. <td colspan="2">无</td>
  168. </tr>
  169. <tr>
  170. <td>Body</td>
  171. <td colspan="2">
  172. <pre>{
  173. "bucketID":1,
  174. "name": "" // 包名
  175. }</pre>
  176. </td>
  177. </tr>
  178. <tr>
  179. <th colspan="3">响应示例</th>
  180. </tr>
  181. <tr>
  182. <td colspan="3">
  183. <pre>{
  184. "code": "OK",
  185. "message": "",
  186. "data": {
  187. "package": {
  188. "packageID": 32,
  189. "name": "t1",
  190. "bucketID": 1,
  191. "createTime": "2025-06-24T16:31:28.5148754+08:00"
  192. }
  193. }
  194. }</pre>
  195. </td>
  196. </tr>
  197. </table>
  198. ### 2.2 根据桶名和包名查询包
  199. <table class="api-doc-table" >
  200. <tr>
  201. <th colspan="3">请求</th>
  202. </tr>
  203. <tr>
  204. <td>GET</td>
  205. <td>application/json</td>
  206. <td>/v1/package/getByFullName</td>
  207. </tr>
  208. <tr>
  209. <td>Query</td>
  210. <td colspan="2">
  211. <p>&#45; bucketName:string // 桶名
  212. &#45; packageName:string // 包名 </p>
  213. </td>
  214. </tr>
  215. <tr>
  216. <td>Body</td>
  217. <td colspan="2">无</td>
  218. </tr>
  219. <tr>
  220. <th colspan="3">响应示例</th>
  221. </tr>
  222. <tr>
  223. <td colspan="3">
  224. <pre>{
  225. "code": "OK",
  226. "message": "",
  227. "data": {
  228. "package": {
  229. "packageID": 32,
  230. "name": "t1",
  231. "bucketID": 1,
  232. "createTime": "2025-06-24T16:31:28.5148754+08:00"
  233. }
  234. }
  235. }</pre>
  236. </td>
  237. </tr>
  238. </table>
  239. ### 2.3 获取桶里所有的包
  240. <table class="api-doc-table" >
  241. <tr>
  242. <th colspan="3">请求</th>
  243. </tr>
  244. <tr>
  245. <td>GET</td>
  246. <td>application/json</td>
  247. <td>/v1/package/listBucketPackages</td>
  248. </tr>
  249. <tr>
  250. <td>Query</td>
  251. <td colspan="2">
  252. <p>&#45; bucketID:int64 // 桶ID </p>
  253. </td>
  254. </tr>
  255. <tr>
  256. <td>Body</td>
  257. <td colspan="2">无</td>
  258. </tr>
  259. <tr>
  260. <th colspan="3">响应示例</th>
  261. </tr>
  262. <tr>
  263. <td colspan="3">
  264. <pre>{
  265. "code": "OK",
  266. "message": "",
  267. "data": {
  268. "packages":[{
  269. "packageID": 32,
  270. "name": "t1",
  271. "bucketID": 1,
  272. "createTime": "2025-06-24T16:31:28.5148754+08:00"
  273. }]
  274. }
  275. }</pre>
  276. </td>
  277. </tr>
  278. </table>
  279. ### 2.4 删除包
  280. <table class="api-doc-table" >
  281. <tr>
  282. <th colspan="3">请求</th>
  283. </tr>
  284. <tr>
  285. <td>POST</td>
  286. <td>application/json</td>
  287. <td>/v1/package/delete</td>
  288. </tr>
  289. <tr>
  290. <td>Query</td>
  291. <td colspan="2">无</td>
  292. </tr>
  293. <tr>
  294. <td>Body</td>
  295. <td colspan="2">
  296. <pre>{
  297. "packageID":1
  298. }</pre>
  299. </td>
  300. </tr>
  301. <tr>
  302. <th colspan="3">响应示例</th>
  303. </tr>
  304. <tr>
  305. <td colspan="3">
  306. <pre>{
  307. "code": "OK",
  308. "message": "",
  309. "data": null
  310. }</pre>
  311. </td>
  312. </tr>
  313. </table>
  314. ## 3 对象相关
  315. ### 3.1 批量上传对象
  316. <table class="api-doc-table" >
  317. <tr>
  318. <th colspan="3">请求</th>
  319. </tr>
  320. <tr>
  321. <td>POST</td>
  322. <td>multipart/form-data; boundary=xxxxxxx</td>
  323. <td>/v1/object/upload</td>
  324. </tr>
  325. <tr>
  326. <td>Query</td>
  327. <td colspan="2">无</td>
  328. </tr>
  329. <tr>
  330. <td>Body</td>
  331. <td colspan="2">
  332. <p>被boundary分隔的多个part,第一个part的name必须是info,格式如下:</p>
  333. <pre>{
  334. "packageID": 1, // PackageID,使用从创建Package接口返回的ID
  335. "affinity": 1 // 文件优先上传到哪个存储空间,可以不填。
  336. }</pre>
  337. <p>之后的每一个part都是一个文件,name为files,filename为文件路径,需要进行URL编码。
  338. 一个例子:</p>
  339. <pre>POST /object/upload HTTP/1.1
  340. User-Agent: PostmanRuntime/7.29.0
  341. Accept: */*
  342. Postman-Token: c12fa8b5-d902-46f3-b104-028effa0d531
  343. Host: localhost:7890
  344. Accept-Encoding: gzip, deflate, br
  345. Connection: keep-alive
  346. Content-Type: multipart/form-data; boundary=&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;818270992847011232305151
  347. Content-Length: 1649
  348. <span></span>
  349. &#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;818270992847011232305151
  350. Content-Disposition: form-data; name="info"
  351. <span></span>
  352. {
  353. "userID": 1,
  354. "packageID": 1
  355. }
  356. &#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;818270992847011232305151
  357. Content-Disposition: form-data; name="files"; filename="test.txt"
  358. Content-Type: text/plain
  359. <span></span>
  360. testdata
  361. &#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;818270992847011232305151
  362. Content-Disposition: form-data; name="files"; filename="a%2Fb%2Ftest2.txt"
  363. <span></span>
  364. testdata2
  365. &#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;818270992847011232305151&#45;&#45;</pre>
  366. </td>
  367. </tr>
  368. <tr>
  369. <th colspan="3">响应示例</th>
  370. </tr>
  371. <tr>
  372. <td colspan="3">
  373. <pre>{
  374. "code": "OK",
  375. "message": "",
  376. "data": {
  377. "uploadeds": [
  378. {
  379. "objectID": 7,
  380. "packageID": 1,
  381. "path": "test.txt",
  382. "size": "123456",
  383. "fileHash": "xxxxxxxxxx",
  384. "redundancy": {
  385. "type": "none"
  386. },
  387. "createTime": "2024-11-05T11:06:28+08:00",
  388. "updateTime": "2025-01-10T09:15:39.4452196+08:00"
  389. },
  390. {
  391. "objectID": 8,
  392. "packageID": 1,
  393. "path": "a/b/test2.txt",
  394. "size": "123456",
  395. "fileHash": "xxxxxxxxxx",
  396. "redundancy": {
  397. "type": "none"
  398. },
  399. "createTime": "2024-11-05T11:06:28+08:00",
  400. "updateTime": "2025-01-10T09:15:39.4452196+08:00"
  401. }
  402. ]
  403. }
  404. }</pre>
  405. </td>
  406. </tr>
  407. </table>
  408. ### 3.2 下载对象
  409. <table class="api-doc-table" >
  410. <tr>
  411. <th colspan="3">请求</th>
  412. </tr>
  413. <tr>
  414. <td>GET</td>
  415. <td>application/json</td>
  416. <td>/v1/object/download</td>
  417. </tr>
  418. <tr>
  419. <td>Query</td>
  420. <td colspan="2">
  421. <p>&#45; objectID:int64
  422. &#45; offset:int64 // 偏移量
  423. &#45; length:int64 // 读取长度。不存在则读取整个对象 </p>
  424. </td>
  425. </tr>
  426. <tr>
  427. <td>Body</td>
  428. <td colspan="2">无</td>
  429. </tr>
  430. <tr>
  431. <th colspan="3">响应示例</th>
  432. </tr>
  433. <tr>
  434. <td colspan="3">
  435. <p>如果请求成功,那么Content-Type将会是application/octet-stream,响应体就是文件数据。
  436. 如果失败,那么Content-Type将会是application/json,响应体格式如下:</p>
  437. <pre>{
  438. "code": "OperationFailed",
  439. "message": "xxxxxxxx",
  440. "data": null
  441. }</pre>
  442. </td>
  443. </tr>
  444. </table>
  445. ### 3.3 根据路径下载对象
  446. <table class="api-doc-table" >
  447. <tr>
  448. <th colspan="3">请求</th>
  449. </tr>
  450. <tr>
  451. <td>GET</td>
  452. <td>application/json</td>
  453. <td>/v1/object/downloadByPath</td>
  454. </tr>
  455. <tr>
  456. <td>Query</td>
  457. <td colspan="2">
  458. <p>&#45; path:string
  459. &#45; offset:int64 // 偏移量
  460. &#45; length:int64 // 读取长度。不存在则读取整个对象 </p>
  461. </td>
  462. </tr>
  463. <tr>
  464. <td>Body</td>
  465. <td colspan="2">无</td>
  466. </tr>
  467. <tr>
  468. <th colspan="3">响应示例</th>
  469. </tr>
  470. <tr>
  471. <td colspan="3">
  472. <p>如果请求成功,那么Content-Type将会是application/octet-stream,响应体就是文件数据。
  473. 如果失败,那么Content-Type将会是application/json,响应体格式如下:</p>
  474. <pre>{
  475. "code": "OperationFailed",
  476. "message": "xxxxxxxx",
  477. "data": null
  478. }</pre>
  479. </td>
  480. </tr>
  481. </table>
  482. ### 3.4 根据路径查询对象
  483. <table class="api-doc-table" >
  484. <tr>
  485. <th colspan="3">请求</th>
  486. </tr>
  487. <tr>
  488. <td>GET</td>
  489. <td>application/json</td>
  490. <td>/v1/object/listByPath</td>
  491. </tr>
  492. <tr>
  493. <td>Query</td>
  494. <td colspan="2">
  495. <p>&#45; packageID:int64
  496. &#45; path:string
  497. &#45; isPrefix:bool // 如果为true,则会用path参数进行前缀查询
  498. &#45; noRecursive:bool // 如果为true,则在进行前缀查询的时候,会用类似查询目录的方式分别返回对象和“目录”
  499. &#45; maxKeys:int // 本次查询最多返回的结果的数量,即commonPrefixes+objects两个数组加起来的总数量
  500. &#45; continuationToken:string // 从token指定的位置进行本次查询,设置为空则从头开始查询。这个值应该直接使用从上一次查询的响应里的类似名字的字段 </p>
  501. </td>
  502. </tr>
  503. <tr>
  504. <td>Body</td>
  505. <td colspan="2">无</td>
  506. </tr>
  507. <tr>
  508. <th colspan="3">响应示例</th>
  509. </tr>
  510. <tr>
  511. <td colspan="3">
  512. <pre>{
  513. "code": "OK",
  514. "message": "",
  515. "data": {
  516. "nextContinuationToken": "123456", // 用于下一次分页查询
  517. "isTruncated": false, // 如果为true,则代表还有更多结果等待下次查询。
  518. "commonPrefixes": [
  519. "a/b/",
  520. "a/c/"
  521. ],
  522. "objects": [
  523. {
  524. "objectID": 617,
  525. "packageID": 12,
  526. "path": "a/1.txt",
  527. "size": "1293",
  528. "fileHash": "Full4E69A8B8CD9F42EDE371DA94458BADFB2308AFCA736AA393784A3D81F4746377",
  529. "redundancy": {
  530. "type": "none"
  531. },
  532. "createTime": "2024-11-19T16:02:25+08:00",
  533. "updateTime": "2024-11-19T16:02:25+08:00"
  534. },
  535. {
  536. "objectID": 618,
  537. "packageID": 12,
  538. "path": "a/2.txt",
  539. "size": "1293",
  540. "fileHash": "Full4E69A8B8CD9F42EDE371DA94458BADFB2308AFCA736AA393784A3D81F4746377",
  541. "redundancy": {
  542. "type": "none"
  543. },
  544. "createTime": "2024-11-19T16:02:25+08:00",
  545. "updateTime": "2024-11-19T16:02:25+08:00"
  546. }
  547. ]
  548. }
  549. }</pre>
  550. </td>
  551. </tr>
  552. </table>
  553. ### 3.5 获取包中所有的对象
  554. <table class="api-doc-table" >
  555. <tr>
  556. <th colspan="3">请求</th>
  557. </tr>
  558. <tr>
  559. <td>GET</td>
  560. <td>application/json</td>
  561. <td>/v1/object/getPackageObjects</td>
  562. </tr>
  563. <tr>
  564. <td>Query</td>
  565. <td colspan="2">
  566. <p>&#45; packageID:int64 </p>
  567. </td>
  568. </tr>
  569. <tr>
  570. <td>Body</td>
  571. <td colspan="2">无</td>
  572. </tr>
  573. <tr>
  574. <th colspan="3">响应示例</th>
  575. </tr>
  576. <tr>
  577. <td colspan="3">
  578. <pre>{
  579. "code": "OK",
  580. "message": "",
  581. "data": {
  582. "objects": [
  583. {
  584. "objectID": 617,
  585. "packageID": 12,
  586. "path": "a/1.txt",
  587. "size": "1293",
  588. "fileHash": "Full4E69A8B8CD9F42EDE371DA94458BADFB2308AFCA736AA393784A3D81F4746377",
  589. "redundancy": {
  590. "type": "none"
  591. },
  592. "createTime": "2024-11-19T16:02:25+08:00",
  593. "updateTime": "2024-11-19T16:02:25+08:00"
  594. },
  595. {
  596. "objectID": 618,
  597. "packageID": 12,
  598. "path": "a/2.txt",
  599. "size": "1293",
  600. "fileHash": "Full4E69A8B8CD9F42EDE371DA94458BADFB2308AFCA736AA393784A3D81F4746377",
  601. "redundancy": {
  602. "type": "none"
  603. },
  604. "createTime": "2024-11-19T16:02:25+08:00",
  605. "updateTime": "2024-11-19T16:02:25+08:00"
  606. }
  607. ]
  608. }
  609. }</pre>
  610. </td>
  611. </tr>
  612. </table>
  613. ### 3.6 批量移动对象
  614. <table class="api-doc-table" >
  615. <tr>
  616. <th colspan="3">请求</th>
  617. </tr>
  618. <tr>
  619. <td>POST</td>
  620. <td>application/json</td>
  621. <td>/v1/object/move</td>
  622. </tr>
  623. <tr>
  624. <td>Query</td>
  625. <td colspan="2">无</td>
  626. </tr>
  627. <tr>
  628. <td>Body</td>
  629. <td colspan="2">
  630. <pre>{
  631. "movings":[
  632. {
  633. "objectID":4, // 原对象ID
  634. "packageID":3, // 移动后的PackageID
  635. "path":"trace2.txt" // 移动后的Path
  636. }
  637. ]
  638. }</pre>
  639. </td>
  640. </tr>
  641. <tr>
  642. <th colspan="3">响应示例</th>
  643. </tr>
  644. <tr>
  645. <td colspan="3">
  646. <pre>{
  647. "code": "OK",
  648. "message": "",
  649. "data": {
  650. "successes": [ // 移动成功的对象ID
  651. 4
  652. ]
  653. }
  654. }</pre>
  655. </td>
  656. </tr>
  657. </table>
  658. ### 3.7 批量删除对象
  659. <table class="api-doc-table" >
  660. <tr>
  661. <th colspan="3">请求</th>
  662. </tr>
  663. <tr>
  664. <td>POST</td>
  665. <td>application/json</td>
  666. <td>/v1/object/delete</td>
  667. </tr>
  668. <tr>
  669. <td>Query</td>
  670. <td colspan="2">无</td>
  671. </tr>
  672. <tr>
  673. <td>Body</td>
  674. <td colspan="2">
  675. <pre>{
  676. "objectIDs":[
  677. 4
  678. ]
  679. }</pre>
  680. </td>
  681. </tr>
  682. <tr>
  683. <th colspan="3">响应示例</th>
  684. </tr>
  685. <tr>
  686. <td colspan="3">
  687. <pre>{
  688. "code": "OK",
  689. "message": "",
  690. "data": null
  691. }</pre>
  692. <p>即使文件不存在也会返回OK</p>
  693. </td>
  694. </tr>
  695. </table>
  696. ### 3.8 批量复制对象
  697. <table class="api-doc-table" >
  698. <tr>
  699. <th colspan="3">请求</th>
  700. </tr>
  701. <tr>
  702. <td>POST</td>
  703. <td>application/json</td>
  704. <td>/v1/object/clone</td>
  705. </tr>
  706. <tr>
  707. <td>Query</td>
  708. <td colspan="2">无</td>
  709. </tr>
  710. <tr>
  711. <td>Body</td>
  712. <td colspan="2">
  713. <pre>{
  714. "clonings": [
  715. {
  716. "objectID": 4, // 原对象ID
  717. "newPath": "trace3.txt", // 新对象的路径
  718. "newPackageID": 3 // 新对象的包ID
  719. }
  720. ]
  721. }</pre>
  722. </td>
  723. </tr>
  724. <tr>
  725. <th colspan="3">响应示例</th>
  726. </tr>
  727. <tr>
  728. <td colspan="3">
  729. <pre>{
  730. "code": "OK",
  731. "message": "",
  732. "data": {
  733. "objects":[{
  734. "objectID": 5,
  735. "packageID": 3,
  736. "path": "trace3.txt",
  737. "size": "1293",
  738. "fileHash": "Full4E69A8B8CD9F42EDE371DA94458BADFB2308AFCA736AA393784A3D81F4746377",
  739. "redundancy": {
  740. "type": "none"
  741. },
  742. "createTime": "2024-11-19T16:02:25+08:00",
  743. "updateTime": "2024-11-19T16:02:25+08:00"
  744. }]
  745. }
  746. }</pre>
  747. </td>
  748. </tr>
  749. </table>
  750. ### 3.9 创建分片上传对象
  751. <table class="api-doc-table" >
  752. <tr>
  753. <th colspan="3">请求</th>
  754. </tr>
  755. <tr>
  756. <td>POST</td>
  757. <td>application/json</td>
  758. <td>/v1/object/newMultipartUpload</td>
  759. </tr>
  760. <tr>
  761. <td>Query</td>
  762. <td colspan="2">无</td>
  763. </tr>
  764. <tr>
  765. <td>Body</td>
  766. <td colspan="2">
  767. <pre>{
  768. "packageID": 3,
  769. "path": "multi" // 对象的path
  770. }</pre>
  771. </td>
  772. </tr>
  773. <tr>
  774. <th colspan="3">响应示例</th>
  775. </tr>
  776. <tr>
  777. <td colspan="3">
  778. <pre>{
  779. "code": "OK",
  780. "message": "",
  781. "data": {
  782. "object": {
  783. "objectID": 1039,
  784. "packageID": 3,
  785. "path": "obj.txt",
  786. "size": "0",
  787. "fileHash": "Full0000000000000000000000000000000000000000000000000000000000000000",
  788. "redundancy": {
  789. "type": "multipartUpload"
  790. },
  791. "createTime": "2025-03-04T16:03:18+08:00",
  792. "updateTime": "2025-03-11T15:20:44.5182982+08:00"
  793. }
  794. }
  795. }</pre>
  796. <p>创建出来的对象能在查询接口里找到</p>
  797. </td>
  798. </tr>
  799. </table>
  800. ### 3.10 上传分片
  801. <table class="api-doc-table" >
  802. <tr>
  803. <th colspan="3">请求</th>
  804. </tr>
  805. <tr>
  806. <td>POST</td>
  807. <td>multipart/form-data; boundary=xxxxxxx</td>
  808. <td>/v1/object/uploadPart</td>
  809. </tr>
  810. <tr>
  811. <td>Query</td>
  812. <td colspan="2">无</td>
  813. </tr>
  814. <tr>
  815. <td>Body</td>
  816. <td colspan="2">
  817. <p>与上传对象接口类似,需要包含info和file两个part,info的格式为:</p>
  818. <pre>{
  819. "objectID": 1, // 使用从创建分片上传对象接口得到的ObjectID
  820. "index": 1 // 分片编号,用于最终合并文件时使用。index相同时会覆盖旧数据。
  821. }</pre>
  822. <p>file则为文件数据</p>
  823. </td>
  824. </tr>
  825. <tr>
  826. <th colspan="3">响应示例</th>
  827. </tr>
  828. <tr>
  829. <td colspan="3">
  830. <pre>{
  831. "code": "OK",
  832. "message": ""
  833. }</pre>
  834. </td>
  835. </tr>
  836. </table>
  837. ### 3.11 合并分片
  838. <table class="api-doc-table" >
  839. <tr>
  840. <th colspan="3">请求</th>
  841. </tr>
  842. <tr>
  843. <td>POST</td>
  844. <td>application/json</td>
  845. <td>/v1/object/completeMultipartUpload</td>
  846. </tr>
  847. <tr>
  848. <td>Query</td>
  849. <td colspan="2">无</td>
  850. </tr>
  851. <tr>
  852. <td>Body</td>
  853. <td colspan="2">
  854. <pre>{
  855. "objectID": 1039, // 需要进行合并的对象的ID
  856. "indexes": [2,3,1] // 分片编号。可以重复出现相同的分片,合并时将按照参数指定的顺序组合分片。未使用的分片将被丢弃
  857. }</pre>
  858. </td>
  859. </tr>
  860. <tr>
  861. <th colspan="3">响应示例</th>
  862. </tr>
  863. <tr>
  864. <td colspan="3">
  865. <pre>{
  866. "code": "OK",
  867. "message": "",
  868. "data": {
  869. "object": {
  870. "objectID": 1039,
  871. "packageID": 3,
  872. "path": "obj.txt",
  873. "size": "30",
  874. "fileHash": "FullB7660EB37969EDC68202258A1838B89493B4C77EA006B1640768D20CEF7A7CD2",
  875. "redundancy": {
  876. "type": "none"
  877. },
  878. "createTime": "2025-03-04T16:03:18+08:00",
  879. "updateTime": "2025-03-11T15:42:03+08:00"
  880. }
  881. }
  882. }</pre>
  883. </td>
  884. </tr>
  885. </table>
  886. ## 4 用户存储空间相关
  887. ### 4.1 创建用户存储空间配置
  888. <table class="api-doc-table" >
  889. <tr>
  890. <th colspan="3">请求</th>
  891. </tr>
  892. <tr>
  893. <td>POST</td>
  894. <td>application/json</td>
  895. <td>/v1/userSpace/create</td>
  896. </tr>
  897. <tr>
  898. <td>Query</td>
  899. <td colspan="2">无</td>
  900. </tr>
  901. <tr>
  902. <td>Body</td>
  903. <td colspan="2">
  904. <pre>{
  905. "name": "test1",
  906. "storage": { // 存储系统类型
  907. "type": "OBS",
  908. "region": "",
  909. "endpoint": "",
  910. "bucket": "",
  911. "projectID": ""
  912. },
  913. "credential": { // 访问存储系统所需的权限信息
  914. "type": "OBS",
  915. "accessKeyId": "",
  916. "secretAccessKey": ""
  917. },
  918. "shardStore": { // 分片存储的配置,为null则不开启分片存储
  919. "maxSize":1024
  920. },
  921. "features": [], // 存储系统特性功能的配置
  922. "workingDir": "" // 包括分片存储在内的各种组件存放数据的根目录
  923. }</pre>
  924. <p>&#45; storage、credential的内容是根据type字段来决定的,你可以在gitlink.org.cn/cloudream/jcs-pub/coordinator/types包中找到更多类型定义。
  925. &#45; features为存储系统特性功能配置,具体有哪些可同样参考上面那个包。注:不是所有存储系统都支持所有特性。</p>
  926. </td>
  927. </tr>
  928. <tr>
  929. <th colspan="3">响应示例</th>
  930. </tr>
  931. <tr>
  932. <td colspan="3">
  933. <pre>{
  934. "code": "OK",
  935. "message": "",
  936. "data": {
  937. "userSpace": {
  938. "userSpaceID": 1,
  939. "name": "test1",
  940. "storage": {
  941. "type": "OBS",
  942. "region": "",
  943. "endpoint": "",
  944. "bucket": "",
  945. "projectID": ""
  946. },
  947. "credential": {
  948. "type": "OBS",
  949. "accessKeyId": "",
  950. "secretAccessKey": ""
  951. },
  952. "shardStore": {
  953. "maxSize": 1024
  954. },
  955. "features": [],
  956. "workingDir": "",
  957. "revision": 1
  958. }
  959. }
  960. }</pre>
  961. </td>
  962. </tr>
  963. </table>
  964. ### 4.2 更新用户存储空间配置
  965. <table class="api-doc-table" >
  966. <tr>
  967. <th colspan="3">请求</th>
  968. </tr>
  969. <tr>
  970. <td>POST</td>
  971. <td>application/json</td>
  972. <td>/v1/userSpace/update</td>
  973. </tr>
  974. <tr>
  975. <td>Query</td>
  976. <td colspan="2">无</td>
  977. </tr>
  978. <tr>
  979. <td>Body</td>
  980. <td colspan="2">
  981. <pre>{
  982. "userSpaceID": 1,
  983. "name": "test1", // 新名称
  984. "credential": { // 新权限信息
  985. "type": "OBS",
  986. "accessKeyId": "",
  987. "secretAccessKey": ""
  988. }
  989. }</pre>
  990. </td>
  991. </tr>
  992. <tr>
  993. <th colspan="3">响应示例</th>
  994. </tr>
  995. <tr>
  996. <td colspan="3">
  997. <pre>{
  998. "code": "OK",
  999. "message": "",
  1000. "data": {
  1001. "userSpace": {
  1002. "userSpaceID": 1,
  1003. "name": "test1",
  1004. "storage": {
  1005. "type": "OBS",
  1006. "region": "",
  1007. "endpoint": "",
  1008. "bucket": "",
  1009. "projectID": ""
  1010. },
  1011. "credential": {
  1012. "type": "OBS",
  1013. "accessKeyId": "",
  1014. "secretAccessKey": ""
  1015. },
  1016. "shardStore": {
  1017. "maxSize": 1024
  1018. },
  1019. "features": [],
  1020. "workingDir": "",
  1021. "revision": 1
  1022. }
  1023. }
  1024. }</pre>
  1025. </td>
  1026. </tr>
  1027. </table>
  1028. ### 4.3 删除用户存储空间配置
  1029. <table class="api-doc-table" >
  1030. <tr>
  1031. <th colspan="3">请求</th>
  1032. </tr>
  1033. <tr>
  1034. <td>POST</td>
  1035. <td>application/json</td>
  1036. <td>/v1/userSpace/delete</td>
  1037. </tr>
  1038. <tr>
  1039. <td>Query</td>
  1040. <td colspan="2">无</td>
  1041. </tr>
  1042. <tr>
  1043. <td>Body</td>
  1044. <td colspan="2">
  1045. <pre>{
  1046. "userSpaceID": 1
  1047. }</pre>
  1048. </td>
  1049. </tr>
  1050. <tr>
  1051. <th colspan="3">响应示例</th>
  1052. </tr>
  1053. <tr>
  1054. <td colspan="3">
  1055. <pre>{
  1056. "code": "OK",
  1057. "message": "",
  1058. "data": null
  1059. }</pre>
  1060. <p>如果不存在也会返回OK</p>
  1061. </td>
  1062. </tr>
  1063. </table>
  1064. ### 4.4 获取用户存储空间配置
  1065. <table class="api-doc-table" >
  1066. <tr>
  1067. <th colspan="3">请求</th>
  1068. </tr>
  1069. <tr>
  1070. <td>GET</td>
  1071. <td>application/json</td>
  1072. <td>/v1/userSpace/get</td>
  1073. </tr>
  1074. <tr>
  1075. <td>Query</td>
  1076. <td colspan="2">
  1077. <p>&#45; userSpaceID: int64</p>
  1078. </td>
  1079. </tr>
  1080. <tr>
  1081. <td>Body</td>
  1082. <td colspan="2">无</td>
  1083. </tr>
  1084. <tr>
  1085. <th colspan="3">响应示例</th>
  1086. </tr>
  1087. <tr>
  1088. <td colspan="3">
  1089. <pre>{
  1090. "code": "OK",
  1091. "message": "",
  1092. "data": {
  1093. "userSpace": {
  1094. "userSpaceID": 1,
  1095. "name": "test1",
  1096. "storage": {
  1097. "type": "OBS",
  1098. "region": "",
  1099. "endpoint": "",
  1100. "bucket": "",
  1101. "projectID": ""
  1102. },
  1103. "credential": {
  1104. "type": "OBS",
  1105. "accessKeyId": "",
  1106. "secretAccessKey": ""
  1107. },
  1108. "shardStore": {
  1109. "maxSize": 1024
  1110. },
  1111. "features": [],
  1112. "workingDir": "",
  1113. "revision": 1
  1114. }
  1115. }
  1116. }</pre>
  1117. </td>
  1118. </tr>
  1119. </table>
  1120. ### 4.5 测试用户存储空间配置
  1121. <table class="api-doc-table" >
  1122. <tr>
  1123. <th colspan="3">请求</th>
  1124. </tr>
  1125. <tr>
  1126. <td>POST</td>
  1127. <td>application/json</td>
  1128. <td>/v1/userSpace/test</td>
  1129. </tr>
  1130. <tr>
  1131. <td>Query</td>
  1132. <td colspan="2">无</td>
  1133. </tr>
  1134. <tr>
  1135. <td>Body</td>
  1136. <td colspan="2">
  1137. <pre>{
  1138. "storage": {
  1139. "type": "OBS",
  1140. "region": "",
  1141. "endpoint": "",
  1142. "bucket": "",
  1143. "projectID": ""
  1144. },
  1145. "credential": {
  1146. "type": "OBS",
  1147. "accessKeyId": "",
  1148. "secretAccessKey": ""
  1149. },
  1150. "workingDir": ""
  1151. }</pre>
  1152. </td>
  1153. </tr>
  1154. <tr>
  1155. <th colspan="3">响应示例</th>
  1156. </tr>
  1157. <tr>
  1158. <td colspan="3">
  1159. <pre>{
  1160. "code": "OK",
  1161. "message": "",
  1162. "data": null
  1163. }</pre>
  1164. <p>返回OK代表配置有效,能够连接到存储系统</p>
  1165. </td>
  1166. </tr>
  1167. </table>
  1168. ### 4.6 从用户存储空间上传到一个新的包
  1169. <table class="api-doc-table" >
  1170. <tr>
  1171. <th colspan="3">请求</th>
  1172. </tr>
  1173. <tr>
  1174. <td>POST</td>
  1175. <td>application/json</td>
  1176. <td>/v1/userSpace/createPackage</td>
  1177. </tr>
  1178. <tr>
  1179. <td>Query</td>
  1180. <td colspan="2">无</td>
  1181. </tr>
  1182. <tr>
  1183. <td>Body</td>
  1184. <td colspan="2">
  1185. <pre>{
  1186. "userSpaceID": 1,
  1187. "path": "", // 用户存储空间中的路径。可以是文件夹也可以是文件。注:不会加上WorkingDir
  1188. "bucketID": 1, // 新创建的包的bucketID
  1189. "name": "", // 新创建的包的名称
  1190. "spaceAffinity": 0 // 上传的文件优先选择的存储空间。为0则不指定
  1191. }</pre>
  1192. </td>
  1193. </tr>
  1194. <tr>
  1195. <th colspan="3">响应示例</th>
  1196. </tr>
  1197. <tr>
  1198. <td colspan="3">
  1199. <pre>{
  1200. "code": "OK",
  1201. "message": "",
  1202. "data": {
  1203. "package": {
  1204. "packageID": 32,
  1205. "name": "t1",
  1206. "bucketID": 1,
  1207. "createTime": "2025-06-24T16:31:28.5148754+08:00"
  1208. }
  1209. }
  1210. }</pre>
  1211. </td>
  1212. </tr>
  1213. </table>
  1214. ### 4.7 下载一个包到用户存储空间
  1215. <table class="api-doc-table" >
  1216. <tr>
  1217. <th colspan="3">请求</th>
  1218. </tr>
  1219. <tr>
  1220. <td>POST</td>
  1221. <td>application/json</td>
  1222. <td>/v1/userSpace/downloadPackage</td>
  1223. </tr>
  1224. <tr>
  1225. <td>Query</td>
  1226. <td colspan="2">无</td>
  1227. </tr>
  1228. <tr>
  1229. <td>Body</td>
  1230. <td colspan="2">
  1231. <pre>{
  1232. "userSpaceID": 1,
  1233. "packageID": 1,
  1234. "rootPath": "", // 存放下载文件的根路径
  1235. }</pre>
  1236. </td>
  1237. </tr>
  1238. <tr>
  1239. <th colspan="3">响应示例</th>
  1240. </tr>
  1241. <tr>
  1242. <td colspan="3">
  1243. <pre>{
  1244. "code": "OK",
  1245. "message": "",
  1246. "data": null
  1247. }</pre>
  1248. </td>
  1249. </tr>
  1250. </table>
  1251. ## 5 用户存储空间同步相关
  1252. ### 5.1 创建同步任务
  1253. <table class="api-doc-table" >
  1254. <tr>
  1255. <th colspan="3">请求</th>
  1256. </tr>
  1257. <tr>
  1258. <td>POST</td>
  1259. <td>application/json</td>
  1260. <td>/v1/spaceSyncer/createTask</td>
  1261. </tr>
  1262. <tr>
  1263. <td>Query</td>
  1264. <td colspan="2">无</td>
  1265. </tr>
  1266. <tr>
  1267. <td>Body</td>
  1268. <td colspan="2">
  1269. <pre>{
  1270. "trigger": { // 同步任务触发条件
  1271. "type": "Interval",
  1272. "interval": 30
  1273. },
  1274. "mode": { // 同步模式
  1275. "type": "Diff",
  1276. "includeSize": false,
  1277. "includeModTime": true
  1278. },
  1279. "filters": [ // 过滤规则
  1280. {
  1281. "type": "Size",
  1282. "minSize": 10,
  1283. "maxSize": 20000
  1284. }
  1285. ],
  1286. "options": { // 选项
  1287. "noEmptyDirectories": false
  1288. },
  1289. "srcUserSpaceID": 1, // 源存储空间ID
  1290. "srcPath": "space1/cli", // 源存储空间中的路径
  1291. "destUserSpaceIDs": [ // 目的存储空间ID
  1292. 2
  1293. ],
  1294. "destPathes": [ // 目的存储空间路径
  1295. "space2/svr"
  1296. ]
  1297. }</pre>
  1298. <p>&#45; trigger、mod、filters的内容是根据type来变化的,可以查看gitlink.org.cn/cloudream/jcs-pub/client/types包来了解更多</p>
  1299. </td>
  1300. </tr>
  1301. <tr>
  1302. <th colspan="3">响应示例</th>
  1303. </tr>
  1304. <tr>
  1305. <td colspan="3">
  1306. <pre>{
  1307. "code": "OK",
  1308. "message": "",
  1309. "data": {
  1310. "task": {
  1311. "taskID": 1,
  1312. "trigger": {
  1313. "type": "Interval",
  1314. "interval": 30
  1315. },
  1316. "mode": {
  1317. "type": "Diff",
  1318. "includeSize": false,
  1319. "includeModTime": true
  1320. },
  1321. "filters": [
  1322. {
  1323. "type": "Size",
  1324. "minSize": 10,
  1325. "maxSize": 20000
  1326. }
  1327. ],
  1328. "options": {
  1329. "noEmptyDirectories": false
  1330. },
  1331. "srcUserSpaceID": 1,
  1332. "srcPath": "space1/cli",
  1333. "destUserSpaceIDs": [
  1334. 2
  1335. ],
  1336. "destPathes": [
  1337. "space2/svr"
  1338. ]
  1339. }
  1340. }
  1341. }</pre>
  1342. </td>
  1343. </tr>
  1344. </table>
  1345. ### 5.2 获取同步任务
  1346. <table class="api-doc-table" >
  1347. <tr>
  1348. <th colspan="3">请求</th>
  1349. </tr>
  1350. <tr>
  1351. <td>GET</td>
  1352. <td>application/json</td>
  1353. <td>/v1/spaceSyncer/getTask</td>
  1354. </tr>
  1355. <tr>
  1356. <td>Query</td>
  1357. <td colspan="2">
  1358. <p>&#45; taskID: int64</p>
  1359. </td>
  1360. </tr>
  1361. <tr>
  1362. <td>Body</td>
  1363. <td colspan="2">无</td>
  1364. </tr>
  1365. <tr>
  1366. <th colspan="3">响应示例</th>
  1367. </tr>
  1368. <tr>
  1369. <td colspan="3">
  1370. <pre>{
  1371. "code": "OK",
  1372. "message": "",
  1373. "data": {
  1374. "task": {
  1375. "taskID": 1,
  1376. "trigger": {
  1377. "type": "Interval",
  1378. "interval": 30
  1379. },
  1380. "mode": {
  1381. "type": "Diff",
  1382. "includeSize": false,
  1383. "includeModTime": true
  1384. },
  1385. "filters": [
  1386. {
  1387. "type": "Size",
  1388. "minSize": 10,
  1389. "maxSize": 20000
  1390. }
  1391. ],
  1392. "options": {
  1393. "noEmptyDirectories": false
  1394. },
  1395. "srcUserSpaceID": 1,
  1396. "srcPath": "space1/cli",
  1397. "destUserSpaceIDs": [
  1398. 2
  1399. ],
  1400. "destPathes": [
  1401. "space2/svr"
  1402. ]
  1403. }
  1404. }
  1405. }</pre>
  1406. </td>
  1407. </tr>
  1408. </table>
  1409. ### 5.3 取消同步任务
  1410. <table class="api-doc-table" >
  1411. <tr>
  1412. <th colspan="3">请求</th>
  1413. </tr>
  1414. <tr>
  1415. <td>POST</td>
  1416. <td>application/json</td>
  1417. <td>/v1/spaceSyncer/cancelTask</td>
  1418. </tr>
  1419. <tr>
  1420. <td>Query</td>
  1421. <td colspan="2">无</td>
  1422. </tr>
  1423. <tr>
  1424. <td>Body</td>
  1425. <td colspan="2">
  1426. <pre>{
  1427. "taskID": 1
  1428. }</pre>
  1429. </td>
  1430. </tr>
  1431. <tr>
  1432. <th colspan="3">响应示例</th>
  1433. </tr>
  1434. <tr>
  1435. <td colspan="3">
  1436. <pre>{
  1437. "code": "OK",
  1438. "message": "",
  1439. "data": null
  1440. }</pre>
  1441. </td>
  1442. </tr>
  1443. </table>
  1444. <style>
  1445. .api-doc-table {
  1446. border-collapse: collapse;
  1447. width: 100%;
  1448. font-family: monospace;
  1449. border: 1px solid #e1e4e8;
  1450. }
  1451. .api-doc-table th {
  1452. background-color: #f6f8fa;
  1453. text-align: center;
  1454. font-weight: 600;
  1455. padding: 8px 12px;
  1456. }
  1457. .api-doc-table td {
  1458. background-color: #ffffff;
  1459. }
  1460. .api-doc-table tr:not(:last-child) td:first-child {
  1461. font-weight: bold;
  1462. }
  1463. .api-doc-table p {
  1464. margin: 6px 0px 0px;
  1465. line-height: 1.2;
  1466. font-size: 0.95em;
  1467. }
  1468. .api-doc-table pre {
  1469. margin: 0px 2px 3px;
  1470. padding: 0px 0px;
  1471. }
  1472. </style>

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。