osm_sdk.go 13 KB

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