osm_sdk.go 12 KB

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