osm_sdk.go 13 KB

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