osm_sdk.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. package osm_sdk
  2. import (
  3. "encoding/json"
  4. "git.sxidc.com/go-framework/baize/framework/core/api/response"
  5. "git.sxidc.com/go-tools/utils/strutils"
  6. "git.sxidc.com/service-supports/dapr_api/invoke"
  7. "github.com/pkg/errors"
  8. "time"
  9. )
  10. const TimeoutSec = 30
  11. const servicePrefix = "/osm/api/v1"
  12. var prefix string
  13. var namespace string
  14. var name string
  15. var invokeAPI *invoke.API
  16. type (
  17. ConfigKey struct {
  18. Namespace string `json:"namespace" form:"namespace" binding:"required"`
  19. Name string `json:"name" form:"name" binding:"required"`
  20. }
  21. DeleteMultiObjJsonBody struct {
  22. ConfigKey
  23. ObjNames []string `json:"objNames" binding:"required"`
  24. UserID string `json:"userId"`
  25. OperatorUserName string `json:"operatorUserName" assign:"toField:OperatorUserName"`
  26. }
  27. CopyJsonBody struct {
  28. ConfigKey
  29. SrcObjName string `json:"srcObjName" binding:"required"`
  30. DstObjName string `json:"dstObjName" binding:"required"`
  31. RequireInfos []string `json:"requireInfos"`
  32. CreateUserID string `json:"createUserId" assign:"toField:CreateUserID"`
  33. OperatorUserName string `json:"operatorUserName" assign:"toField:OperatorUserName"`
  34. }
  35. MoveJsonBody struct {
  36. ConfigKey
  37. SrcObjName string `json:"srcObjName" binding:"required"`
  38. DstObjName string `json:"dstObjName" binding:"required"`
  39. RequireInfos []string `json:"requireInfos"`
  40. UpdateUserID string `json:"updateUserId" assign:"toField:LastUpdateUserID"`
  41. OperatorUserName string `json:"operatorUserName" assign:"toField:OperatorUserName"`
  42. }
  43. ZoomUrlJsonBody struct {
  44. ConfigKey
  45. ObjName string `json:"srcObjName" binding:"required"`
  46. Process string `json:"dstObjName" binding:"required"`
  47. RequireInfos []string `json:"requireInfos"`
  48. CreateUserID string `json:"createUserId" assign:"toField:CreateUserID"`
  49. OperatorUserName string `json:"operatorUserName" assign:"toField:OperatorUserName"`
  50. }
  51. )
  52. func Destroy() {
  53. if invokeAPI == nil {
  54. return
  55. }
  56. invoke.DestroyAPI(invokeAPI)
  57. invokeAPI = nil
  58. }
  59. func Init(configPrefix, configNamespace, configName, baseUrl string) error {
  60. prefix = configPrefix
  61. namespace = configNamespace
  62. name = configName
  63. if invokeAPI == nil {
  64. invokeAPI = invoke.NewAPI(baseUrl, TimeoutSec*time.Second)
  65. }
  66. return nil
  67. }
  68. //func Touch(reader io.Reader, to string) error {
  69. // return TouchPrefix(reader, to, true)
  70. //}
  71. //func TouchPrefix(reader io.Reader, to string, addPfx bool) error {
  72. // if addPfx {
  73. // return Bkt.PutObject(prefix+to, reader)
  74. // }
  75. // return Bkt.PutObject(to, reader)
  76. //}
  77. func GetUrl(objName, userId string) (string, error) {
  78. return getUrl(objName, userId)
  79. }
  80. func GetUrlWithPrefix(objName, userId string) (string, error) {
  81. return getUrl(prefix+objName, userId)
  82. }
  83. func getUrl(objName, userId string) (string, error) {
  84. if strutils.IsStringEmpty(objName) {
  85. return "", nil
  86. }
  87. responseBytes, err := invokeAPI.GetWithoutHeaders(servicePrefix+"/operation/url/get", map[string]string{
  88. "namespace": namespace,
  89. "name": name,
  90. "objName": objName,
  91. "userId": userId,
  92. })
  93. if err != nil {
  94. return "", err
  95. }
  96. resp := new(response.InfoResponse[string])
  97. err = json.Unmarshal(responseBytes, resp)
  98. if err != nil {
  99. return "", err
  100. }
  101. if !resp.Success {
  102. return "", errors.New(resp.Msg)
  103. }
  104. return resp.Info, nil
  105. }
  106. //func ZoomUrl(obj, s string) (string, error) {
  107. // if strutils.HasBlank(obj) {
  108. // log.Println("oss发现违规参数")
  109. // return "", nil
  110. // }
  111. // return Bkt.SignURL(prefix+obj, oss.HTTPGet, 60, oss.Process(s))
  112. //}
  113. //
  114. //func ZoomUrlPfx(obj, s string, addPfx bool) (string, error) {
  115. // if strutils.HasBlank(obj) {
  116. // log.Println("oss发现违规参数")
  117. // return "", nil
  118. // }
  119. //
  120. // if addPfx {
  121. // return Bkt.SignURL(prefix+obj, oss.HTTPGet, 60, oss.Process(s))
  122. // }
  123. //
  124. // return Bkt.SignURL(obj, oss.HTTPGet, 60, oss.Process(s))
  125. //
  126. //}
  127. func ZoomUrl(objName, profess string) (string, error) {
  128. return zoomlUrl(objName, profess)
  129. }
  130. func ZoomUrlWithPrefix(objName, profess string) (string, error) {
  131. return zoomlUrl(prefix+objName, profess)
  132. }
  133. func zoomlUrl(objName, process string) (string, error) {
  134. if strutils.IsStringEmpty(objName) {
  135. return "", nil
  136. }
  137. requestJson, err := json.Marshal(ZoomUrlJsonBody{
  138. ConfigKey: ConfigKey{
  139. Namespace: namespace,
  140. Name: name,
  141. },
  142. ObjName: objName,
  143. Process: process,
  144. RequireInfos: nil,
  145. })
  146. if err != nil {
  147. return "", err
  148. }
  149. responseBytes, err := invokeAPI.PostJSON(servicePrefix+"/operation/obj/zoomUrl", requestJson, nil)
  150. if err != nil {
  151. return "", err
  152. }
  153. resp := new(response.InfoResponse[string])
  154. err = json.Unmarshal(responseBytes, resp)
  155. if err != nil {
  156. return "", err
  157. }
  158. if !resp.Success {
  159. return "", errors.New(resp.Msg)
  160. }
  161. return resp.Info, nil
  162. }
  163. //func Exist(obj string) (bool, error) {
  164. // if strutils.HasBlank(obj) {
  165. // return false, nil
  166. // }
  167. //
  168. // return Bkt.IsObjectExist(prefix + obj)
  169. //}
  170. func Exist(objName, userId string) (bool, error) {
  171. return exist(objName, userId)
  172. }
  173. func ExistWithPrefix(objName, userId string) (bool, error) {
  174. return exist(prefix+objName, userId)
  175. }
  176. func exist(objName, userId string) (bool, error) {
  177. if strutils.IsStringEmpty(objName) {
  178. return false, nil
  179. }
  180. responseBytes, err := invokeAPI.GetWithoutHeaders(servicePrefix+"/operation/obj/check", map[string]string{
  181. "namespace": namespace,
  182. "name": name,
  183. "objName": objName,
  184. "userId": userId,
  185. })
  186. if err != nil {
  187. return false, err
  188. }
  189. resp := new(response.InfoResponse[bool])
  190. err = json.Unmarshal(responseBytes, resp)
  191. if err != nil {
  192. return false, err
  193. }
  194. if !resp.Success {
  195. return false, errors.New(resp.Msg)
  196. }
  197. return true, nil
  198. }
  199. func DeleteMulti(userId string, objNames ...string) error {
  200. return deleteMulti(userId, objNames...)
  201. }
  202. func DeleteMultiWithPrefix(userId string, objNames ...string) error {
  203. for _, objName := range objNames {
  204. objName = prefix + objName
  205. }
  206. return deleteMulti(userId, objNames...)
  207. }
  208. func deleteMulti(userId string, objNames ...string) error {
  209. if len(objNames) == 0 {
  210. return nil
  211. }
  212. requestJson, err := json.Marshal(DeleteMultiObjJsonBody{
  213. ConfigKey: ConfigKey{
  214. Namespace: namespace,
  215. Name: name,
  216. },
  217. UserID: userId,
  218. ObjNames: objNames,
  219. })
  220. if err != nil {
  221. return err
  222. }
  223. responseBytes, err := invokeAPI.PostJSON(servicePrefix+"/operation/obj/deleteMulti", requestJson, nil)
  224. if err != nil {
  225. return err
  226. }
  227. resp := new(response.MsgResponse)
  228. err = json.Unmarshal(responseBytes, resp)
  229. if err != nil {
  230. return err
  231. }
  232. if !resp.Success {
  233. return errors.New(resp.Msg)
  234. }
  235. return nil
  236. }
  237. func ListDir(dirPath, userId string) ([]string, error) {
  238. return listDir(dirPath, userId)
  239. }
  240. func ListDirWithPrefix(dirPath, userId string) ([]string, error) {
  241. return listDir(prefix+dirPath, userId)
  242. }
  243. func listDir(dirPath, userId string) ([]string, error) {
  244. if strutils.IsStringEmpty(dirPath) {
  245. return nil, nil
  246. }
  247. responseBytes, err := invokeAPI.GetWithoutHeaders(servicePrefix+"/operation/objPath/list", map[string]string{
  248. "namespace": namespace,
  249. "name": name,
  250. "dirPath": dirPath,
  251. "userId": userId,
  252. })
  253. if err != nil {
  254. return nil, err
  255. }
  256. resp := new(response.InfoResponse[[]string])
  257. err = json.Unmarshal(responseBytes, resp)
  258. if err != nil {
  259. return nil, err
  260. }
  261. if !resp.Success {
  262. return nil, errors.New(resp.Msg)
  263. }
  264. return resp.Info, nil
  265. }
  266. //func LsWithoutPrefix(dir string) ([]string, error) {
  267. // if strutils.HasBlank(dir) {
  268. // return []string{}, nil
  269. // }
  270. //
  271. // v2, err := Bkt.ListObjectsV2(oss.Prefix(dir))
  272. // if err != nil {
  273. // return nil, err
  274. // }
  275. //
  276. // ks := make([]string, len(v2.Objects))
  277. // for i, obj := range v2.Objects {
  278. // ks[i] = obj.Key
  279. // }
  280. //
  281. // return ks, nil
  282. //}
  283. type ObjectInfo struct {
  284. Key string
  285. Type string
  286. Size int64
  287. }
  288. //func LsDetails(dir string) ([]ObjectInfo, error) {
  289. // if strutils.HasBlank(dir) {
  290. // return []ObjectInfo{}, nil
  291. // }
  292. //
  293. // v2, err := Bkt.ListObjectsV2(oss.Prefix(prefix + dir))
  294. // if err != nil {
  295. // return nil, err
  296. // }
  297. //
  298. // ks := make([]ObjectInfo, len(v2.Objects))
  299. // for i, obj := range v2.Objects {
  300. // ks[i] = ObjectInfo{
  301. // Key: obj.Key,
  302. // Type: obj.Type,
  303. // Size: obj.Size,
  304. // }
  305. // }
  306. //
  307. // return ks, nil
  308. //}
  309. func LsDetails(dirPath, userId string) ([]ObjectInfo, error) {
  310. return lsDetails(dirPath, userId)
  311. }
  312. func LsDetailsWithPrefix(dirPath, userId string) ([]ObjectInfo, error) {
  313. return lsDetails(prefix+dirPath, userId)
  314. }
  315. func lsDetails(dirPath, userId string) ([]ObjectInfo, error) {
  316. if strutils.IsStringEmpty(dirPath) {
  317. return []ObjectInfo{}, nil
  318. }
  319. responseBytes, err := invokeAPI.GetWithoutHeaders(servicePrefix+"/operation/objPath/listDetail", map[string]string{
  320. "namespace": namespace,
  321. "name": name,
  322. "dirPath": dirPath,
  323. "userId": userId,
  324. })
  325. if err != nil {
  326. return nil, err
  327. }
  328. resp := new(response.InfoResponse[[]ObjectInfo])
  329. err = json.Unmarshal(responseBytes, resp)
  330. if err != nil {
  331. return nil, err
  332. }
  333. if !resp.Success {
  334. return nil, errors.New(resp.Msg)
  335. }
  336. return resp.Info, nil
  337. }
  338. //func Mv(f, t string) error {
  339. // if err := Cp(f, t); err != nil {
  340. // return err
  341. // }
  342. //
  343. // return Bkt.DeleteObject(prefix + f)
  344. //}
  345. func Move(srcObjName, dstObjName, userId string, requireInfos []string) error {
  346. return move(srcObjName, dstObjName, userId, requireInfos)
  347. }
  348. func MoveWithPrefix(srcObjName, dstObjName, userId string, requireInfos []string) error {
  349. return move(prefix+srcObjName, prefix+dstObjName, userId, requireInfos)
  350. }
  351. func moves(srcObjName, dstObjName, userId string, requireInfos []string) error {
  352. if strutils.IsStringEmpty(srcObjName) {
  353. return nil
  354. }
  355. if strutils.IsStringEmpty(dstObjName) {
  356. return nil
  357. }
  358. err := copying(srcObjName, dstObjName, requireInfos)
  359. if err != nil {
  360. return err
  361. }
  362. return deleteMulti(userId, srcObjName)
  363. }
  364. func move(srcObjName, dstObjName, userId string, requireInfos []string) error {
  365. if strutils.IsStringEmpty(srcObjName) {
  366. return nil
  367. }
  368. if strutils.IsStringEmpty(dstObjName) {
  369. return nil
  370. }
  371. requestJson, err := json.Marshal(MoveJsonBody{
  372. ConfigKey: ConfigKey{
  373. Namespace: namespace,
  374. Name: name,
  375. },
  376. SrcObjName: srcObjName,
  377. DstObjName: dstObjName,
  378. RequireInfos: requireInfos,
  379. })
  380. if err != nil {
  381. return err
  382. }
  383. responseBytes, err := invokeAPI.PutJSON(servicePrefix+"/operation/obj/move", requestJson, nil)
  384. if err != nil {
  385. return err
  386. }
  387. resp := new(response.InfoResponse[any])
  388. err = json.Unmarshal(responseBytes, resp)
  389. if err != nil {
  390. return err
  391. }
  392. if !resp.Success {
  393. return errors.New(resp.Msg)
  394. }
  395. return nil
  396. }
  397. //func CpOrigin(f, t string) error {
  398. // _, err := Bkt.CopyObject(f, t)
  399. // return err
  400. //}
  401. func Copy(srcObjName, dstObjName string, requireInfos []string) error {
  402. return copying(srcObjName, dstObjName, requireInfos)
  403. }
  404. func CopyWithPrefix(srcObjName, dstObjName string, requireInfos []string) error {
  405. return copying(prefix+srcObjName, prefix+dstObjName, requireInfos)
  406. }
  407. func copying(srcObjName, dstObjName string, requireInfos []string) error {
  408. if strutils.IsStringEmpty(srcObjName) {
  409. return nil
  410. }
  411. if strutils.IsStringEmpty(dstObjName) {
  412. return nil
  413. }
  414. requestJson, err := json.Marshal(CopyJsonBody{
  415. ConfigKey: ConfigKey{
  416. Namespace: namespace,
  417. Name: name,
  418. },
  419. SrcObjName: srcObjName,
  420. DstObjName: dstObjName,
  421. RequireInfos: requireInfos,
  422. })
  423. if err != nil {
  424. return err
  425. }
  426. responseBytes, err := invokeAPI.PostJSON(servicePrefix+"/operation/obj/copy", requestJson, nil)
  427. if err != nil {
  428. return err
  429. }
  430. resp := new(response.InfoResponse[any])
  431. err = json.Unmarshal(responseBytes, resp)
  432. if err != nil {
  433. return err
  434. }
  435. if !resp.Success {
  436. return errors.New(resp.Msg)
  437. }
  438. return nil
  439. }
  440. func CopyPublic(srcObjName, dstObjName string, requireInfos []string) error {
  441. return copyPublic(srcObjName, dstObjName, requireInfos)
  442. }
  443. func CopyPublicWithPrefix(srcObjName, dstObjName string, requireInfos []string) error {
  444. return copyPublic(prefix+srcObjName, prefix+dstObjName, requireInfos)
  445. }
  446. func copyPublic(srcObjName, dstObjName string, requireInfos []string) error {
  447. if strutils.IsStringEmpty(srcObjName) {
  448. return nil
  449. }
  450. if strutils.IsStringEmpty(dstObjName) {
  451. return nil
  452. }
  453. requestJson, err := json.Marshal(CopyJsonBody{
  454. ConfigKey: ConfigKey{
  455. Namespace: namespace,
  456. Name: name,
  457. },
  458. SrcObjName: srcObjName,
  459. DstObjName: dstObjName,
  460. RequireInfos: requireInfos,
  461. })
  462. if err != nil {
  463. return err
  464. }
  465. responseBytes, err := invokeAPI.PostJSON(servicePrefix+"/operation/obj/copyPublic", requestJson, nil)
  466. if err != nil {
  467. return err
  468. }
  469. resp := new(response.InfoResponse[any])
  470. err = json.Unmarshal(responseBytes, resp)
  471. if err != nil {
  472. return err
  473. }
  474. if !resp.Success {
  475. return errors.New(resp.Msg)
  476. }
  477. return nil
  478. }
  479. //func Cp(f, t string) error {
  480. // return CpOrigin(prefix+f, prefix+t)
  481. //}
  482. //
  483. //func TouchFormatImg(reader io.Reader, to string) error {
  484. // if reader == nil || strutils.HasBlank(to) {
  485. // log.Println("oss上传发现违规参数")
  486. // return nil
  487. // }
  488. //
  489. // return Bkt.PutObject(prefix+to, reader, oss.ContentType("image/jpg"))
  490. //}
  491. //func GetObjectBytes(obj string) ([]byte, error) {
  492. // if strutils.HasBlank(obj) {
  493. // return nil, errors.New("参数错误")
  494. // }
  495. // buf := new(bytes.Buffer)
  496. // body, err := Bkt.GetObject(prefix + obj)
  497. // if err != nil {
  498. // return nil, err
  499. // }
  500. // _, err = io.Copy(buf, body)
  501. // if err != nil {
  502. // return nil, err
  503. // }
  504. // err = body.Close()
  505. // if err != nil {
  506. // return nil, err
  507. // }
  508. //
  509. // return buf.Bytes(), nil
  510. //}
  511. //func getObjectBytes(objName, userId string) ([]byte, error) {
  512. // if strutils.IsStringEmpty(objName) {
  513. // return nil, nil
  514. // }
  515. // if strutils.IsStringEmpty(objName) {
  516. // return nil, nil
  517. // }
  518. // buf := new(bytes.Buffer)
  519. //
  520. // responseBytes, err := invokeAPI.GetWithoutHeaders(servicePrefix+"/operation/obj/getContent", map[string]string{
  521. // "namespace": namespace,
  522. // "name": name,
  523. // "objName": objName,
  524. // "userId": userId,
  525. // })
  526. // if err != nil {
  527. // return nil, err
  528. // }
  529. //
  530. // resp := new(response.InfoResponse[[]byte])
  531. // err = json.Unmarshal(responseBytes, resp)
  532. // if err != nil {
  533. // return nil, err
  534. // }
  535. //
  536. // if !resp.Success {
  537. // return nil, errors.New(resp.Msg)
  538. // }
  539. //
  540. // //return resp.Info, nil
  541. // _, err = io.Copy(buf, resp.Info)
  542. // if err != nil {
  543. // return nil, err
  544. // }
  545. // err = body.Close()
  546. // if err != nil {
  547. // return nil, err
  548. // }
  549. //
  550. // return buf.Bytes(), nil
  551. //}
  552. //func MvWithoutPrefix(f, t string) error {
  553. // if _, err := Bkt.CopyObject(f, t); err != nil {
  554. // return err
  555. // }
  556. //
  557. // return Bkt.DeleteObject(f)
  558. //}