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

10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543
  1. # JCS-pub API
  2. **跳转回README.md [中文](../README.md) [English](../README_en.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>

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