resource.go 100 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921
  1. package controllers
  2. import (
  3. "bufio"
  4. "encoding/json"
  5. "eta/eta_mobile/models"
  6. "eta/eta_mobile/services"
  7. "eta/eta_mobile/services/alarm_msg"
  8. "eta/eta_mobile/utils"
  9. "fmt"
  10. "github.com/kgiannakakis/mp3duration/src/mp3duration"
  11. "io"
  12. "os"
  13. "path"
  14. "regexp"
  15. "strings"
  16. "time"
  17. )
  18. // 资源管理-图片上传,合同上传等
  19. type ResourceController struct {
  20. //BaseAuthController
  21. BaseCommonController
  22. }
  23. // @Title 图片上传
  24. // @Description 图片上传接口
  25. // @Param file query file true "文件"
  26. // @Success 200 {object} models.ResourceResp
  27. // @router /image/upload [post]
  28. func (this *ResourceController) Upload() {
  29. br := new(models.BaseResponse).Init()
  30. defer func() {
  31. this.Data["json"] = br
  32. this.ServeJSON()
  33. }()
  34. f, h, err := this.GetFile("file")
  35. if err != nil {
  36. br.Msg = "获取资源信息失败"
  37. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  38. return
  39. }
  40. uploadFileName := h.Filename //上传的文件名
  41. ext := path.Ext(h.Filename)
  42. dateDir := time.Now().Format("20060102")
  43. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  44. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  45. if err != nil {
  46. br.Msg = "存储目录创建失败"
  47. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  48. return
  49. }
  50. randStr := utils.GetRandStringNoSpecialChar(28)
  51. fileName := randStr + ext
  52. fpath := uploadDir + "/" + fileName
  53. defer f.Close() //关闭上传文件
  54. err = this.SaveToFile("file", fpath)
  55. if err != nil {
  56. br.Msg = "文件上传失败"
  57. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  58. return
  59. }
  60. resourceUrl := ``
  61. //上传到阿里云 和 minio
  62. //if utils.ObjectStorageClient == "minio" {
  63. // resourceUrl, err = services.UploadImgToMinIo(fileName, fpath)
  64. // if err != nil {
  65. // br.Msg = "文件上传失败"
  66. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  67. // return
  68. // }
  69. //} else {
  70. // resourceUrl, err = services.UploadAliyunV2(fileName, fpath)
  71. // if err != nil {
  72. // br.Msg = "文件上传失败"
  73. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  74. // return
  75. // }
  76. //}
  77. ossClient := services.NewOssClient()
  78. if ossClient == nil {
  79. br.Msg = "上传失败"
  80. br.ErrMsg = "初始化OSS服务失败"
  81. return
  82. }
  83. resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
  84. if err != nil {
  85. br.Msg = "文件上传失败"
  86. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  87. return
  88. }
  89. defer func() {
  90. os.Remove(fpath)
  91. }()
  92. item := new(models.Resource)
  93. item.ResourceUrl = resourceUrl
  94. item.ResourceType = 1
  95. item.CreateTime = time.Now()
  96. newId, err := models.AddResource(item)
  97. if err != nil {
  98. br.Msg = "资源上传失败"
  99. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  100. return
  101. }
  102. resp := models.ResourceResp{
  103. Id: newId,
  104. ResourceUrl: resourceUrl,
  105. ResourceName: uploadFileName,
  106. }
  107. br.Msg = "上传成功"
  108. br.Ret = 200
  109. br.Success = true
  110. br.Data = resp
  111. return
  112. }
  113. // @Title 视频上传
  114. // @Description 视频上传接口
  115. // @Param file query file true "文件"
  116. // @Success 200 新增成功
  117. // @router /video/upload [post]
  118. func (this *ResourceController) VideoUpload() {
  119. utils.FileLog.Info("start VideoUpload ")
  120. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  121. br := new(models.BaseResponse).Init()
  122. defer func() {
  123. this.Data["json"] = br
  124. this.ServeJSON()
  125. }()
  126. f, h, err := this.GetFile("file")
  127. if err != nil {
  128. br.Msg = "获取资源信息失败"
  129. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  130. return
  131. }
  132. ext := path.Ext(h.Filename)
  133. dateDir := time.Now().Format("20060102")
  134. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  135. //uploadDir := "./" + dateDir
  136. fmt.Println(uploadDir)
  137. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  138. if err != nil {
  139. br.Msg = "存储目录创建失败"
  140. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  141. return
  142. }
  143. randStr := utils.GetRandStringNoSpecialChar(28)
  144. fileName := randStr + ext
  145. fpath := uploadDir + "/" + fileName
  146. defer f.Close() //关闭上传文件
  147. utils.FileLog.Info("start save")
  148. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  149. utils.FileLog.Info("fpath %s:", fpath)
  150. fileHandle, err := os.OpenFile(fpath, os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModeAppend)
  151. if err != nil {
  152. br.Msg = "创建文件失败"
  153. br.ErrMsg = "创建文件失败,Err:" + err.Error()
  154. return
  155. }
  156. defer fileHandle.Close()
  157. //循环读取
  158. for {
  159. buffer := make([]byte, 4096)
  160. _, err := f.Read(buffer)
  161. //如果错误信息是其他类型的,则直接panic
  162. if err != nil && err != io.EOF {
  163. br.Msg = "上传失败"
  164. br.ErrMsg = "读取文件内容失败,Err:" + err.Error()
  165. return
  166. }
  167. //注意,错误信息是以io包的EOF时,表示读取到文件末尾
  168. if err == io.EOF {
  169. break
  170. }
  171. // NewWriter 默认缓冲区大小是 4096
  172. // 需要使用自定义缓冲区的writer 使用 NewWriterSize()方法
  173. buf := bufio.NewWriter(fileHandle)
  174. // 字节写入
  175. // 字符串写入
  176. buf.WriteString(string(buffer))
  177. // 将缓冲中的数据写入
  178. err = buf.Flush()
  179. if err != nil {
  180. br.Msg = "上传失败"
  181. br.ErrMsg = "写入文件内容失败,Err:" + err.Error()
  182. return
  183. }
  184. }
  185. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  186. utils.FileLog.Info("end save")
  187. //err = this.SaveToFile("file", fpath)
  188. //if err != nil {
  189. // br.Msg = "文件上传失败"
  190. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  191. // return
  192. //}
  193. /*
  194. fmt.Println("start")
  195. fmt.Println(time.Now())
  196. tofile:="./20201123.mp4"
  197. fromFile:="./第五期下.mp4"
  198. f, err := os.Open(fromFile)
  199. defer f.Close() //注意要关闭文件
  200. fileHandle, err := os.OpenFile(tofile, os.O_RDONLY|os.O_CREATE|os.O_APPEND, 0666)
  201. if err != nil {
  202. fmt.Println("open file error :", err)
  203. return
  204. }
  205. defer fileHandle.Close()
  206. if err != nil {
  207. panic(err)
  208. } else {
  209. //循环读取
  210. for {
  211. buffer := make([]byte, 4096)
  212. _, err := f.Read(buffer)
  213. //如果错误信息是其他类型的,则直接panic
  214. if err != nil && err != io.EOF {
  215. panic(err)
  216. }
  217. //注意,错误信息是以io包的EOF时,表示读取到文件末尾
  218. if err == io.EOF {
  219. fmt.Println("读取完毕")
  220. break
  221. }
  222. // NewWriter 默认缓冲区大小是 4096
  223. // 需要使用自定义缓冲区的writer 使用 NewWriterSize()方法
  224. buf := bufio.NewWriter(fileHandle)
  225. // 字节写入
  226. // 字符串写入
  227. buf.WriteString(string(buffer))
  228. // 将缓冲中的数据写入
  229. err = buf.Flush()
  230. if err != nil {
  231. fmt.Println("flush error :"+err.Error())
  232. return
  233. }
  234. }
  235. }
  236. */
  237. utils.FileLog.Info("start update oss ")
  238. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  239. //savePath := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
  240. //savePath += fileName
  241. defer func() {
  242. _ = os.Remove(fpath)
  243. }()
  244. //上传到阿里云 和 minio
  245. resourceUrl := ``
  246. //if utils.ObjectStorageClient == "minio" {
  247. // err = services.UploadVideoToMinIo(fileName, fpath, savePath)
  248. // if err != nil {
  249. // br.Msg = "文件上传失败"
  250. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  251. // return
  252. // }
  253. // resourceUrl = utils.MinIoImghost + savePath
  254. //} else {
  255. // err = services.UploadVideoAliyun(fileName, fpath, savePath)
  256. // if err != nil {
  257. // br.Msg = "文件上传失败"
  258. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  259. // return
  260. // }
  261. // resourceUrl = utils.Imghost + savePath
  262. //}
  263. ossClient := services.NewOssClient()
  264. if ossClient == nil {
  265. br.Msg = "上传失败"
  266. br.ErrMsg = "初始化OSS服务失败"
  267. return
  268. }
  269. resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
  270. if err != nil {
  271. br.Msg = "文件上传失败"
  272. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  273. return
  274. }
  275. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  276. utils.FileLog.Info("end update oss ")
  277. item := new(models.Resource)
  278. item.ResourceUrl = resourceUrl
  279. item.ResourceType = 3
  280. item.CreateTime = time.Now()
  281. newId, err := models.AddResource(item)
  282. if err != nil {
  283. br.Msg = "资源上传失败"
  284. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  285. return
  286. }
  287. resp := new(models.ResourceResp)
  288. resp.Id = newId
  289. resp.ResourceUrl = resourceUrl
  290. utils.FileLog.Info("start GetMP4Duration ")
  291. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  292. duration, err := services.GetMP4Duration(f)
  293. if err != nil {
  294. panic(err)
  295. }
  296. utils.FileLog.Info("end GetMP4Duration ")
  297. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  298. resp.PlaySeconds = duration
  299. br.Msg = "上传成功"
  300. br.Ret = 200
  301. br.Success = true
  302. br.Data = resp
  303. utils.FileLog.Info("end VideoUpload ")
  304. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  305. return
  306. }
  307. // VoiceUpload
  308. // @Title 音频上传
  309. // @Description 音频上传接口
  310. // @Param file query file true "文件"
  311. // @Success 200 {object} models.ResourceResp
  312. // @router /voice/upload [post]
  313. func (this *ResourceController) VoiceUpload() {
  314. utils.FileLog.Info("start VoiceUpload ")
  315. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  316. br := new(models.BaseResponse).Init()
  317. defer func() {
  318. this.Data["json"] = br
  319. this.ServeJSON()
  320. }()
  321. f, h, err := this.GetFile("file")
  322. if err != nil {
  323. br.Msg = "获取资源信息失败"
  324. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  325. return
  326. }
  327. uploadFileName := h.Filename //上传的文件名
  328. ext := path.Ext(h.Filename)
  329. dateDir := time.Now().Format("20060102")
  330. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  331. //uploadDir := "./" + dateDir
  332. fmt.Println(uploadDir)
  333. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  334. if err != nil {
  335. br.Msg = "存储目录创建失败"
  336. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  337. return
  338. }
  339. randStr := utils.GetRandStringNoSpecialChar(28)
  340. fileName := randStr + ext
  341. fpath := uploadDir + "/" + fileName
  342. defer f.Close() //关闭上传文件
  343. utils.FileLog.Info("start save")
  344. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  345. utils.FileLog.Info(fmt.Sprintf("fpath %s:", fpath))
  346. fileHandle, err := os.OpenFile(fpath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755)
  347. if err != nil {
  348. br.Msg = "创建文件失败"
  349. br.ErrMsg = "创建文件失败,Err:" + err.Error()
  350. return
  351. }
  352. defer fileHandle.Close()
  353. localFileBuffer := make([]byte, 0)
  354. //循环读取
  355. for {
  356. buffer := make([]byte, 4096)
  357. maxLen, err := f.Read(buffer)
  358. //如果错误信息是其他类型的,则直接panic
  359. if err != nil && err != io.EOF {
  360. br.Msg = "上传失败"
  361. br.ErrMsg = "读取文件内容失败,Err:" + err.Error()
  362. return
  363. }
  364. //注意,错误信息是以io包的EOF时,表示读取到文件末尾
  365. if err == io.EOF {
  366. break
  367. }
  368. // NewWriter 默认缓冲区大小是 4096
  369. // 需要使用自定义缓冲区的writer 使用 NewWriterSize()方法
  370. buf := bufio.NewWriter(fileHandle)
  371. // 字节写入
  372. // 字符串写入
  373. buf.WriteString(string(buffer))
  374. localFileBuffer = append(localFileBuffer, buffer[0:maxLen]...)
  375. // 将缓冲中的数据写入
  376. err = buf.Flush()
  377. if err != nil {
  378. br.Msg = "上传失败"
  379. br.ErrMsg = "写入文件内容失败,Err:" + err.Error()
  380. return
  381. }
  382. }
  383. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  384. utils.FileLog.Info("end save")
  385. defer func() {
  386. if utils.FileIsExist(fpath) {
  387. os.Remove(fpath)
  388. }
  389. }()
  390. var playSeconds float64
  391. if ext == ".m4a" { //m4a格式的走这个计算逻辑
  392. utils.FileLog.Info("start calculate m4a duration ")
  393. tmpPlaySeconds, err := services.GetMP4Duration(f)
  394. if err != nil {
  395. br.Msg = "音频资源时长计算失败"
  396. br.ErrMsg = "音频资源时长计算失败,Err:" + err.Error()
  397. return
  398. }
  399. playSeconds = float64(tmpPlaySeconds)
  400. utils.FileLog.Info("end calculate m4a duration ")
  401. } else {
  402. utils.FileLog.Info("start calculate mp3duration ")
  403. playSeconds, err = mp3duration.Calculate(fpath)
  404. if playSeconds <= 0 {
  405. playSeconds, err = utils.GetVideoPlaySeconds(fpath)
  406. if err != nil {
  407. br.Msg = "音频资源时长计算失败"
  408. br.ErrMsg = "音频资源时长计算失败,Err:" + err.Error()
  409. return
  410. }
  411. }
  412. utils.FileLog.Info("end calculate mp3duration ")
  413. }
  414. utils.FileLog.Info("start update oss ")
  415. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  416. defer func() {
  417. _ = os.Remove(fpath)
  418. }()
  419. //savePath := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
  420. //savePath += fileName
  421. //上传到阿里云 和 minio
  422. resourceUrl := ``
  423. //if utils.ObjectStorageClient == "minio" {
  424. // err = services.UploadVideoToMinIo(fileName, fpath, savePath)
  425. // if err != nil {
  426. // br.Msg = "文件上传失败"
  427. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  428. // return
  429. // }
  430. // resourceUrl = utils.MinIoImghost + savePath
  431. //} else {
  432. // err = services.UploadVideoAliyun(fileName, fpath, savePath)
  433. // if err != nil {
  434. // br.Msg = "文件上传失败"
  435. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  436. // return
  437. // }
  438. // resourceUrl = utils.Imghost + savePath
  439. //}
  440. ossClient := services.NewOssClient()
  441. if ossClient == nil {
  442. br.Msg = "上传失败"
  443. br.ErrMsg = "初始化OSS服务失败"
  444. return
  445. }
  446. resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
  447. if err != nil {
  448. br.Msg = "文件上传失败"
  449. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  450. return
  451. }
  452. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  453. utils.FileLog.Info("end update oss ")
  454. item := new(models.Resource)
  455. item.ResourceUrl = resourceUrl
  456. item.ResourceType = 3
  457. item.CreateTime = time.Now()
  458. newId, err := models.AddResource(item)
  459. if err != nil {
  460. br.Msg = "音频资源上传失败"
  461. br.ErrMsg = "音频资源上传失败,Err:" + err.Error()
  462. return
  463. }
  464. resp := models.ResourceResp{
  465. Id: newId,
  466. ResourceUrl: resourceUrl,
  467. ResourceName: uploadFileName,
  468. PlaySeconds: uint32(playSeconds),
  469. }
  470. br.Msg = "上传成功"
  471. br.Ret = 200
  472. br.Success = true
  473. br.Data = resp
  474. utils.FileLog.Info("end VoiceUpload ")
  475. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  476. return
  477. }
  478. /*
  479. func (c *Controller) SaveToFile(fromfile, tofile string) error {
  480. file, _, err := c.Ctx.Request.FormFile(fromfile)
  481. if err != nil {
  482. return err
  483. }
  484. defer file.Close()
  485. f, err := os.OpenFile(tofile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
  486. if err != nil {
  487. return err
  488. }
  489. defer f.Close()
  490. io.Copy(f, file)
  491. return nil
  492. }
  493. */
  494. func init123() {
  495. fmt.Println("start")
  496. fmt.Println(time.Now())
  497. tofile := "./20201123.mp4"
  498. fromFile := "./第五期下.mp4"
  499. f, err := os.Open(fromFile)
  500. defer f.Close() //注意要关闭文件
  501. fileHandle, err := os.OpenFile(tofile, os.O_RDONLY|os.O_CREATE|os.O_APPEND, 0666)
  502. if err != nil {
  503. fmt.Println("open file error :", err)
  504. return
  505. }
  506. defer fileHandle.Close()
  507. if err != nil {
  508. panic(err)
  509. } else {
  510. //循环读取
  511. for {
  512. buffer := make([]byte, 4096)
  513. _, err := f.Read(buffer)
  514. //如果错误信息是其他类型的,则直接panic
  515. if err != nil && err != io.EOF {
  516. panic(err)
  517. }
  518. //注意,错误信息是以io包的EOF时,表示读取到文件末尾
  519. if err == io.EOF {
  520. fmt.Println("读取完毕")
  521. break
  522. }
  523. // NewWriter 默认缓冲区大小是 4096
  524. // 需要使用自定义缓冲区的writer 使用 NewWriterSize()方法
  525. buf := bufio.NewWriter(fileHandle)
  526. // 字节写入
  527. // 字符串写入
  528. buf.WriteString(string(buffer))
  529. // 将缓冲中的数据写入
  530. err = buf.Flush()
  531. if err != nil {
  532. fmt.Println("flush error :" + err.Error())
  533. return
  534. }
  535. }
  536. }
  537. fmt.Println(time.Now())
  538. fmt.Println("end")
  539. }
  540. // @Title 上传图片
  541. // @Description 上传图片
  542. // @Param Image query string false "图片,base64字符串"
  543. // @Success 200 {object} models.ImageResponse
  544. // @router /upload_image_base64 [post]
  545. func (this *ResourceController) UploadImageBase64() {
  546. br := new(models.BaseResponse).Init()
  547. defer func() {
  548. this.Data["json"] = br
  549. this.ServeJSON()
  550. }()
  551. var err error
  552. ext := ".png"
  553. uploadDir := "./static"
  554. randStr := utils.GetRandStringNoSpecialChar(28)
  555. fileName := randStr + ext
  556. fpath := uploadDir + "/" + fileName
  557. image := this.Ctx.Request.FormValue("Image")
  558. if image == "" {
  559. br.Msg = "参数错误"
  560. br.ErrMsg = "图片内容不能为空"
  561. return
  562. }
  563. b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, image)
  564. if !b {
  565. br.Msg = "图片格式不正确"
  566. br.ErrMsg = "图片格式不正确"
  567. return
  568. }
  569. re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
  570. base64Str := re.ReplaceAllString(image, "")
  571. base64Str = strings.Replace(base64Str, " ", "", -1)
  572. err = utils.SaveBase64ToFile(base64Str, fpath)
  573. if err != nil {
  574. br.Msg = "图片保存失败"
  575. br.ErrMsg = "图片保存失败,Err:" + err.Error()
  576. return
  577. }
  578. fmt.Println("end")
  579. defer os.Remove(fpath)
  580. hzUploadDir := "static/images/"
  581. savePath := hzUploadDir + time.Now().Format("200601/20060102/")
  582. savePath += fileName
  583. //上传到阿里云 和 minio
  584. resourceUrl := ``
  585. //if utils.ObjectStorageClient == "minio" {
  586. // err = services.UploadFileToMinIo(fileName, fpath, savePath)
  587. // if err != nil {
  588. // br.Msg = "文件上传失败"
  589. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  590. // return
  591. // }
  592. // resourceUrl = utils.MinIoImghost + savePath
  593. //} else {
  594. // err = services.UploadFileToAliyun(fileName, fpath, savePath)
  595. // if err != nil {
  596. // br.Msg = "文件上传失败"
  597. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  598. // return
  599. // }
  600. // resourceUrl = utils.Imghost + savePath
  601. //}
  602. ossClient := services.NewOssClient()
  603. if ossClient == nil {
  604. br.Msg = "上传失败"
  605. br.ErrMsg = "初始化OSS服务失败"
  606. return
  607. }
  608. resourceUrl, err = ossClient.UploadFile(fileName, fpath, savePath)
  609. if err != nil {
  610. br.Msg = "文件上传失败"
  611. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  612. return
  613. }
  614. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  615. utils.FileLog.Info("end update oss ")
  616. item := new(models.Resource)
  617. item.ResourceUrl = resourceUrl
  618. item.ResourceType = 1
  619. item.CreateTime = time.Now()
  620. newId, err := models.AddResource(item)
  621. if err != nil {
  622. br.Msg = "资源上传失败"
  623. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  624. return
  625. }
  626. resp := new(models.ResourceResp)
  627. resp.Id = newId
  628. resp.ResourceUrl = resourceUrl
  629. br.Msg = "上传成功"
  630. br.Ret = 200
  631. br.Success = true
  632. br.Data = resp
  633. utils.FileLog.Info("end VideoUpload ")
  634. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  635. }
  636. //
  637. //func init() {
  638. // fmt.Println("start")
  639. // var err error
  640. // //imageBody:=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAq8AAAH0CAYAAAATwMQ0AAAgAElEQVR4XuydCbyc0/nHf9QSGiQhiBINaklRS6i1tihto7bYUolYIlVLbI3QEEErQojGFlFLQmqJJRptELuQIlGK0NJIpIJohKrE/v/85njzn5k7c /M3Jk7Z Z n88nnyf33vc973O 75l5f3PmOc9Z6uuvv/5aGAQgAAEIQAACEIAABGqAwFKI1xq4S4QIAQhAAAIQgAAEIJAigHhlIEAAAhCAAAQgAAEI1AwBxGvN3CoChQAEIAABCEAAAhBAvDIGIAABCEAAAhCAAARqhgDitWZuFYFCAAIQgAAEIAABCCBeGQMQgAAEIAABCEAAAjVDAPFaM7eKQCEAAQhAAAIQgAAEEK MAQhAoOYJTJ8 XXfffbcGDx6sNm3apPqzePFiXXDBBdp///219dZb13wf6QAEIAABCAQCiFdGAgQgUPMEShGvo0aNUufOnbXvvvum j9x4kQ9 yzGQK4nGASMT158mTtvffeJV0nO Zc8bkfa6 99hLBPmvWLI0cOVJDhw5Vu3btMk5JYtpmm21S52R/AChn/2kLAhCAQLkIIF7LRZJ2IACBoghYiN10001FnXPEEUfoxBNPVCnnJhdKb8Pi1TZnzpyUkLV43XTTTXXJJZfkjStdeFoonn/ UuOzRalFtX9 /df8vezzz57iVguquPfHNyUePX1fMzAgQPVtWvX1FmFileLeB9722236eSTT14yg53dh/S411xzzdT1unTpUkp3OAcCEIBASQQQryVh4yQIQKC5BJoSYtntWyhaZFq8ZltzZl6zxWt66kFjs7G 5ty5c5eI0YULF6ZEn2cw09tw kznMlMb/pMbHZ/LKA9W/rYY49liONczBNB7HiGDBnSQEymi9dC2kuu0ZTQ9v179913S5pBbu7Y4XwIQKB1E0C8tu77T 8hUDUC5RSvpXQiuX4 8ZpLcDZ1HYvdMWPGNBCQjYnX7JzcxmZK8zHLJ1wdbzEzr031L/m72/SHCKcikE9cKDWOgwAEykUA8VoukrQDAQgURSARYp5NbSp9wLOAicjMNfOaPSuba8bUv7MlM5/5xOsJJ5ygQYMG6aWXXmrQn2RGNDt3NDkwW0Q2lt7gmVXnvzYmXt94442MtIPsgPy1vWd7x40bp3PPPTf19b2Fstveb7/9dPPNN6eukdjpp5 e6lf673LdtEJmXX1erntR1CDgYAhAAAIlEEC8lgCNUyAAgeYTKNfMq2cBLdwS8ebIssVrIiLTRVlj4vXCCy9MicL0XM7GZjATGm7TAtbiMV3gJjOV/fr1WyKe81VDKOQ6 egnba6xxhpLhGV6e67E4AoMXqBlEZ9rRrip 9LYLG/zRwUtQAACEGiaAOK1aUYcAQEIVIBAUyIp 5K5cl6TPFPPAKZ/fZ2I12QW1W1lC8pCxGv79u1TeaQWskkbuVbt 2 5BGrSh2RhV7p4LkS8JmIz30xpsvjM18klXJO4kmoDTbWXxJtv5jXfNSowPGgSAhCAQF4CiFcGBwQgUBUC6eK1sRXto0ePTgnTbPGaCFd/DZ4cky0W/XO6wEvvaDnFaxKL48z Kj09zu23317du3fPmPVsLG0gEZu5atWm80iE81577dXg uWcec2X01uVAcRFIQCBVksA8dpqbz0dh0B1CWSL16Y2GUgXa4kgdGkqi9d0cZcIOfeusTJOhYhXt5GkJOSbeW1MOPocC/OxY8emYE dOjXlLaidQpBrE4VcYrMx8dq7d /UzHD67HN6JYRc7ZWS89qYQK/uSOLqEIBAayOAeG1td5z QiASAs0Rr8m5nmlMBGCHDh1SAu6dd95J9bCxjQDSv7J3uav0Oq9ONUhyXtMF6wcffNCg2H9Tgi65jmOxYHSu6S677JISm8ccc0yTC7aa po/16xykgNscbzTTjtlVBtoTs4rs66RvHAIAwIQYIctxgAEIFAdAs0Rr0nEiTjcddddUyvrk6/t89Vn9TVtFnbOAz3kkEP04osv5hWvCxYsWLLr1Lx58zLEa3Jtt5dd1zWJL4nDq/y98UGyUMp/LyTn1Yu PIv61FNPLUkHaKyEV64SVsnM65lnnqkrrriiyUoDSezp4r xGrbVGT1cFQIQaM0EmHltzXefvkOgigSam/PamABsSrz6q3aLSYtKF 7PN/M6adIk3X///an0g/RZWIvKZBFWdr5tOtLrr79eu 22mzp16pSxyr8Y8ZotcnNtyOD28tVezVW9IIkrvZpCvsVvbjvJSW6qhFYVhxOXhgAEWhEBxGsrutl0FQIxEWhq5jU71lzVBvLNXuYSeOnizG0nObYWp niNZlFTbZaPfzww1N1X7O/os9XwzXXlqml7rCVlNtKhGmSEpHOJqmBm2tzhETUJtUG3J5jcQrElVdeqfSSWo2J10KEekxji1ggAIH6JoB4re/7S 8gEC2BYktlJbOf6av584nX9BX 6QCSr8It9Dp37pxa9Z IYv/87LPPplIA/PdkxjUp/O/cWufHZpfcKgRwqTtspW/nmksU 9qNbWGbS7ymx5u9RW1TmzAU0leOgQAEIFBpAojXShOmfQhAICeBpsRrtrDKJ95KwTtlyhStv/76GZsQuJ2m8libEoqlxMI5EIAABCBQHAHEa3G8OBoCEIAABCAAAQhAoIoEEK9VhM lIQABCEAAAhCAAASKI4B4LY4XR0MAAhCAAAQgAAEIVJEA4rWK8Lk0BCAAAQhAAAIQgEBxBBCvxfHiaAhAAAIQgAAEIACBKhJAvFYRPpeGAAQgAAEIQAACECiOAOK1OF4cDQEIQAACEIAABCBQRQKI1yrC59IQgAAEIAABCEAAAsURQLwWx4ujIQABCEAAAhCAAASqSADxWkX4XBoCEIAABCAAAQhAoDgCiNfieHE0BCAAAQhAAAIQgEAVCSBeqwifS0MAAhCAAAQgAAEIFEcA8VocL46GAAQgAAEIQAACEKgiAcRrFeFzaQhAAAIQgAAEIACB4gggXovjxdEQgAAEIAABCEAAAlUkgHitInwuDQEIQAACEIAABCBQHAHEa3G8OBoCEIAABCAAAQhAoIoEEK9VhM lIQABCEAAAhCAAASKI4B4LY4XR0MAAhCAAAQgAAEIVJEA4rWK8Lk0BCAAAQhAAAIQgEBxBBCvxfHiaAhAAAIQgAAEIACBKhJAvFYRPpeGAAQgAAEIQAACECiOAOK1OF4cDQEIQAACEIAABCBQRQKI1yrC59IQgAAEIAABCEAAAsURQLwWx4ujIQABCEAAAhCAAASqSADxWkX4XBoCEIAABCAAAQhAoDgCiNfieHE0BCAAAQhAAAIQgEAVCSBeqwifS0MAAhCAAAQgAAEIFEcA8VocL46GAAQgAAEIQAACEKgiAcRrFeFzaQhAAAIQgAAEIACB4gggXovjxdEQgAAEIAABCEAAAlUkgHitInwuDQEIQAACEIAABCBQHAHEa3G8OBoCEIAABCAAAQhAoIoEEK9VhM lIQCBQGDx4sW64IILNHny5IKQ7L333ho8eLDatGmz5PiFCxdqyJAhOvnkk9WlS5fU72fNmqWRI0dq6NChateu3ZJjk vtv// 2nrrrZcc94Mf/EBXXXVVzhhyXbOgYCM/aPr06Xrqqad04okn5ow0 8TJ05MHbfvvvtmHG/ l1xyiU444QTdeOONOuSQQ5bch8gREB4EIFBjBBCvNXbDCBcC9UggW0w21keLqbvvvjslXseMGaObbrqpKCRHHHGE vXrlxLLu 66qx599FFZxI4dOzZD5I4aNUo77LBDStymW7bQ3nTTTVMCOV0cFxVQCx9cyAeF0aNHp/pt1uaQ3r9EvG6 eYpwfvOO 802oOkLbeT617V64eCFr6tXA4CrYoA4rVV3W46C4E4CZQqXps785pPvCaziKeffnoDUTplyhStv/76S2YVLcos8mpJwKaPgnwzrxap/pCQ3a mZl5zMcs16pJ7vs022zSYxY1zlBIVBCAQCwHEayx3gjgg0IoJJELGYvLmm2/WSy 9lJOGZzkPP/zw1GxpdtpAMfjSr5c 83rKKafo3HPPzXn9ZAYx zpOTfA5/pekKxQTSzWOtQA9//zzc17aM6Hm7HuQML7 utTM7GXXXbZEjbJcU4VyGdnn312XmGaPoOe/iGkGjy4JgQgUFsEEK 1db IFgJ1SaAcM6/Z a3ZM4TpM4yNidfrrrtO6bOHTcXmdp1r6xnYWhGvxQwic5wzZ86SnNh0run/z56tzjdD62vnyk8uJiaOhQAEWjcBxGvrvv/0HgJFExg6tOhTMk4YMqTh ekC8fvf/37OxVtJbukbb7yxJOc1mbHz f56O32RULbIcn6sF265fZuP33PPPVNtJTmvnnlNxKuv44VMSX5ssrgrPfok7jXWWCPvgqfm0arM2Rb6 fJV02dLzfDZZ5/NmOXO5ppvBteR55t5tdC35VskVple0yoEIFAvBBCv9XIn6QcEWojAUks170Jff920eM0WoumzqtniNRGQbjU9lcAia9GiRamvuefOnZuRu5mI3eaI1xYRrh98IP3 96UD79DBCrHB fmqMFhUdu7cOfVVf7pwffnll1MMk9 7wez/Fzrzmu/apXeSMyEAgdZGAPHa2u44/YVAMwnEJF7dFVcN PDDD7XKKqs0EK eFcw1 1eIeH3sscdSX5fnmnm1UHNJLs/GZpeMaibezNMXLGi eD3ppKLF69prr71kdtusnNeapFI0Z aVRVplHR00BoFWSwDx2mpvPR2HQGkEYkobcCqAy1nZkvJZ999//5LFSNnCNcnf7N27d0qQHXPMMak0gVxpA PGjUvNQu61114pgZykDbTIjGtpt6bgswpNG8iV79ucnNd6zw8u AZwIAQg0CwCiNdm4eNkCECgHASyc16z0wbSr5FrlXryu7Zt2 rVV19NpQh45tSWPjOaXqP0tttuU9 fXXFFVc0qPOaiDufn70QK18JqXJwaMk20uvYJjPJzkFN6trmmyVNGDrWxvJdk764rm6S2 prvvvuu82qFNGSjLgWBCAQJwHEa5z3hagg0KoINLWiv1Dxmp3zmr5KPhGinql1/qZtl112Sc3Apm9S4Jza/v37y6WxOnTokBJeW2yxRUpw2XLtBLbmmmvWXLWBJHVi5syZck5rYu6LF7ZZaOZKi8iuIpBd9zbhnOTOJu22WKpFq3rl0FkItE4CiNfWed/pNQSiItCUeM3 mjs7HSDXbGyur8aTigXehtZ1StN3xUrElcHkKsyfveo KoBFBpO 21U2y6buRbp49bEWvk7ZMFvX6E123MpXF7fIUDkcAhCAQAMCiFcGBQQgAAEIQAACEIBAzRBAvNbMrSJQCEAAAhCAAAQgAAHEK2MAAhCAAAQgAAEIQKBmCCBea ZWESgEIAABCEAAAhCAAOKVMQABCEAAAhCAAAQgUDMEEK81c6sIFAIQgAAEIAABCEAA8coYgAAEIAABCEAAAhCoGQKI15q5VQQKAQhAAAIQgAAEIIB4ZQxAAAIQgAAEIAABCNQMAcRrzdwqAoUABCAAAQhAAAIQQLwyBiAAAQhAAAIQgAAEaoYA4rVmbhWBQgACEIAABCAAAQggXhkDEIAABCAAAQhAAAI1QwDxWjO3ikAhAAEIQAACEIAABJolXseMGaPnnnsuRbFbt27q16/fEqKzZs3S5ZdfrkWLFmmFFVbQd7/7Xc2cOXPJ39dff32deOKJqb/ZJkyYoAcffDD1//bt22vYsGFLjl2wYIGGDh2qxYsXp37Xp08f7bjjjkv PnXqVI0dOzb1c5s2bTRkyBB16NCBuwsBCEAAAhCAAAQgUGcEShavkyZN0lprraWtttpKCxcu1EUXXaSDDjpoyc933HGHDj/88JQ49bGPPPJI6u/bbbddA4QWn PHj9fAgQO10korpYRq586dddppp6WOHTRokDp27Jj62SL3oYceSv1u3XXX1ezZszV8 HD16tUrJWj9e1u6 K2ze0Z3IAABCEAAAhCAQKslULJ4zSbmWdhOnTqpR48eDWAms7AHHnigdt555wZ/Txen/qMF6hNPPJGaQfVsbSJsLVaTWVi307NnT40YMULz589fIlbThbCPxyAAAQhAAAIQgAAE6odAWcRr9sxrNp5k5vXjjz9O/WmfffZZInKzxaj/bgE6btw49e7dW/PmzVsiZJNUgPTZ1Wzh65lYz7ruscceKXGLQQACEIAABCAAAQjUD4GyiFfPutrSc14TRJ51HT16tPr3768uXbosSTHwV/yepc0lNtPF67Rp0zRnzpyMPNZEvDrNIDvFAPFaP4OTnkAAAhCAAAQgAIFsAs0Sr16MNWrUKHXt2jVnusCMGTPk3NczzjhD7dq1W3Jt/37KlCmpBVtuwwI0SQNg5pVBCgEIQAACEIAABCCQj0CzxGtTea6uADBgwIAM4epAskUtOa8MUAhAAAIQgAAEIACBQgiULF6dx/rKK69klLtKLthYDmwyW tyWEmaAdUGCrlVHAMBCEAAAhCAAAQgULJ4Ta/xmmBMFmKl13hN/rbccsvps88 S/3oGq9vv/12albWebA26rwyGCEAAQhAAAIQgAAEmiJQsnhtquHG/u7ZV4tfi91EvDanPc6FAAQgAAEIQAACEGgdBKoiXp3zOn369JzVCWLBPn3m wWFsvUmqxV0HAdBAAIQgAAEIAABCDSfQFXEa/PDrmwLFq6I0soypnUIQAACEIAABCBQCgHEaw5qiNdShhLnQAACEIAABFoZga /lq68Unr3XWnffaVu3VoZgOp0F/GKeK3OyOOqEIAABCAAgVoncMAB0k47SZ06SddfL11 udS1a633Kvr4Ea I1 gHKQFCAAIQgAAEoiNw8MHSySdLO wQQnv4YenOO8NMLFZRAohXxGtFBxiNQwACEIAABOqOwJQp0iWXSJMnZ3ZtqaWkr76S7LGKEUC8Il4rNrhoGAIQgAAEIFCXBDzr2rOnZJ9uRx8tHXaY1L17XXY7lk4hXhGvsYxF4oAABCAAAQjUBoFtt5WeeaZhrOecIy2zjGSPVYwA4hXxWrHBRcMQgAAEIACBuiPw4IMhr/Weexp27YEHpLvvlq6 uu66HVOHEK I15jGI7FAAAIQgAAE4iYwcKC02mqSfba99VZYwGWPVYwA4hXxWrHBRcMQgAAEIACBuiPgfNbzz5e23z5311ZeWZo7V7LHKkIA8Yp4rcjAolEIQAACEIBAXRJYemnpiy8k 1x25JHSccdJzovFKkIA8Yp4rcjAolEIQAACEIBA3RF4/nnpqKMk 3zWt6 0666SPVYRAohXxGtFBhaNQgACEIAABOqOwPjx0ksvSb/7Xf6uDRsmLVwo2WMVIYB4RbxWZGDRKAQgAAEIQKDuCAwYIK23nmSfz 67T3JFgpEj6677sXQI8Yp4jWUsEgcEIAABCEAgbgK77y4NHizZ57MXX5QOP1yyxypCAPGKeK3IwKJRCEAAAhCAQN0R2GYb6c9/ljp2zN 1Tz4JpbTssYoQQLwiXisysGgUAhCAAAQgUFcEFiyQNthAsm/KNt5YevRRac01mzqSv5dAAPGKeC1h2HAKBCAAAQhAoJURePJJadAgyb4p23FHafhwyR4rOwHEK K17IOKBiEAAQhAAAJ1R CWW6TXXpPOO6/prjnnde 9Q 4rVnYCiFfEa9kHFQ1CAAIQgAAE6o7Ar38trb66ZN UnX22tNxykj1WdgKIV8Rr2QcVDUIAAhCAAATqjsC 4YNCuybsltvDdUGGqsH21Qb/D0vAcQr4pWXBwQgAAEIQAACTRHYZBPprrsk 6bMi7XOPTcs2sLKTgDxingt 6CiQQhAAAIQgEDdEdh2W2naNGnppZvu2uzZ0o9 JNljZSeAeEW8ln1Q0SAEIAABCECgrgi89Za0ww6SfaHmWq/z50tLLVXoGRxXIAHEK K1wKHCYRCAAAQgAIFWSuCxx6RzzpHsC7X115ceeECyx8pKAPGKeC3rgKIxCEAAAhCAQN0RuOEG6fHHJftCbc89pYEDJXusrAQQr4jXsg4oGoMABCAAAQjUHYERI6Rll5VOOqnwrvXvL221lWSPlZUA4hXxWtYBRWMQgAAEIACBuiPgElk77RRKZRVqV18tffhh2JULKysBxCvitawDisYgAAEIQAACdUfgJz8Js672hdrEidL110v2WFkJIF4Rr2UdUDQGAQhAAAIQqDsCBx8cFmxtumnhXZs5UzrgAMkeKysBxCvitawDisYgAAEIQAACdUdgnXWkp56S7Au1r76Sdt djQoK5VXEcYhXxGsRw4VDIQABCEAAAq2QwLe/Lb33nmRfjG24oTRpkmSPlY0A4hXxWrbBREMQgAAEIACBuiPw2WdS27aSfbG2335S376SPVY2AohXxGvZBhMNQQACEIAABOqOgGdct9mmtK1eXWKrTRvp OPrDks1O4R4RbxWc/xxbQhAAAIQgEDcBP7xD6lHD8m WLvzTmn8eMkeKxsBxCvitWyDiYYgAAEIQAACdUdg nTp2GMl 2LtzTelXXeV7LGyEUC8Il7LNphoCAIQgAAEIFB3BB59VDr33NKrBnixlreWXXPNukNTrQ4hXhGv1Rp7XBcCEIAABCAQP4E//Um69lrJvhT7xS kn/5UssfKQgDxingty0CiEQhAAAIQgEBdEnDOqstd2Zdid90VhO8NN5RyNufkIIB4RbzywoAABCAAAQhAIB Bm2 W/vlPaejQ0hntuad03XXSuuuW3gZnLiGAeEW88nKAAAQgAAEIQCAfgUsvlebOlexLtU8 kXbaKWxy0Lt3aGW11aQVV5R 8AOpU6dSW26V5yFeEa tcuDTaQhAAAIQgEBBBC64QFq8WLJvrj3xhPTYY9KcOdIyy0j/ lf4t9Za0qBB0t57N/cKreJ8xCvitVUMdDoJAQhAAAIQKInAmWdKK68s2VfKXNFg7FhpwIAwE4s1SgDxinjlJQIBCEAAAhCAQD4CFpTrrReEZaVtu 1Cbu1ee1X6SjXdPuIV8VrTA5jgIQABCEAAAhUl0K ftO22kn1L2I9 FFILllqqJa5Wk9dAvCJea3LgEjQEIAABCECgRQi0dJ3Wyy8PebD2WE4CiFfEKy8NCEAAAhCAAATyETj6aGm//aR99mk5Rt/7Xph99UIurAEBxCvilZcFBCAAAQhAAAL5CDj/9NRTWzYP1bVln3lG v3vuS85CCBeEa 8MCAAAQhAAAIQyEfAOaguk2Xfkrb tIDD0j2WAYBxCvilZcEBCAAAQhAAAL5CGyzjXTVVZJ9S9rEidLjj0sjRrTkVWviWohXxGtNDFSChAAEIAABCFSFwPe/L91 u2Tf0vaTn0gnnSTZY0sINEu8jhkzRs8991yqsW7duqlfWhmJGTNmaPTo0VphhRU0YMAAdenSpVHsyfG52lq0aJFGjRqlN954I2d7U6dO1VgX95XUpk0bDRkyRB06dCj5Nk f b623mS1ks/nRAhAAAIQgAAE6oSAa7xOmRJqvba0ff21tO66kmdht9yypa9enuv985/Syy HLXatzbzwbaWVmtV2yeJ10qRJWmuttbTVVltp4cKFuuiii3TQQQelfk7Mv7/88svVp0 fRsXrrFmzUuLTInf55ZdPCdWuXbuqR48eqaYskjt16pT62SL3jjvu0BlnnKF27dpp9uzZGj58uHr16qUdd9xRg7y9mqRhw4aVDAbxWjI6ToQABCAAAQjUF4FOnaQZMyT7aplnXi38FiyQtthCmj9f s53pP/8R1pzTc/cSd/9rrTnntIqq1Qryszr3nZbWHDWrp207LLSxhuHbXEtZPv2lU45peQ4Sxav2VdMF5jFitfscy1Qp0yZohNPPFHvvPPOEmFrsZrMwnbv3j0llEeMGKH58 cvEauehR0/frwGDhyodf1ppQRDvJYAjVMgAAEIQAAC9Uhgww0lf8vsLWKrac8 K73/vvTf/0offSQtv7z04YfS0kuHurDf pZ0zTXSvvtKv/61tNlm1Yn2hhvCAjcL6d69pR13bBiHRa1nkx96qKQYyyJemzPzmi1G3QvPxDrloH///vrggw WCFmnINgsdm1OU/BMa8eOHXXaaaelfueZWM 67rHHHurZs2dJUBCvJWHjJAhAAAIQgED9EbBITMRiLfTOQvvII6VevaQzz2yZiN97T/rjH4NotXj2dZuqkvDUU5K/YffscZG7iZVFvKaLyXRKhaQN5BK 6eL15Zdf1iuvvJKahc0WrwceeKCGDh2qzp07I15bZnhyFQhAAAIQgEDrImBh5dzTWrNrr5XuukuaPLlykd97r3T//dIdd0gDBkjHHit17Fj49ZwG4Tq6nlUuwpolXpNZ0/T81GLFKzOv3xDzC2PRIumzz6SvvgpfAzhPBKsdAq Ks2cKb3zTkhMX2aZkIu09dZhX2wMAuUk8NJL0hNPSG 8IS23nLTJJmEWo337cl6FtiDQugl8 mlIF7CvRbNwHTVKuvHG4kRlU3294gppwoTA5oQTpB//uKkz8v/9yy/D UWkEDRLvObKcy1WvPr4msh5XbgwCBInSX/wQbhhzidZY43ib5hXLXrnDP/z1xH 2Tk1L7wQHkCzZgXB4wTxn/0s/N95I01VUJg2LbTph5qFk//94AfS/vs3fW4hvXj bBd3d/ FoS2PzE5MXzttaXNNw9fETghe7XVQu5NYh6Y5vbuu HrAX/9snhxOHeDDSRvg1eL9tpr4d6Zt1/ELmDtDx7bby99/nlIpv/rX6W33pLeflu6 GJpjz2a7qnPSVZmenxstFE4r5mrM5u MEeURMDvB9/ dhCQLWUnnugcqTDG9t47jBe/Jv1AOeyw8CDwdpbNseRDmL8O/OILyWlb/kDtD2S rj9gYxCoJIEHHwzPHD/b/P7nZ4 fM35G tn25puSF4k777Nr1/A89g9Sm/4AACAASURBVM/bbVe qPy88jPOvlbt3/8Oi7y8gGr33ZvXCz/rhgyRdttN s1vyreIzc9Jz9x6prgAK1m8utpA9tf52dcrJG3A50RZbeCpiSEB2i8OT4n7zdsPCQvCTz6RLMj8grKwPOAA6ZhjGsdt4fbb30r33BOEqs/xnsUWe55iX3XVhudb6PkBddNNkoWSr3n44eHhYcHn2Cwg7747eD9EDz5Yats2iEKLKovGK6 U vQJdeI8PV o foWrPfdJ02fHpLE3Y5ndryq0QLNbxoW9Y7TYttfr3g2yH3zi92fVi26/WC3WHV//TuvjPzf/yTPVvr3Fn7O0Wkqwdwzm34D83nur7m4fef4 A3GD3G/gfnB67bM4Ic/DB8MfK98HzbdNDDym59/55 LsdGjQ1K874HvnZlasDb2VYnZ D447ksucW25sPoysalTpb/8Rbr vCmYNHq N0P99F/9/1zDpPHYSnmD2Dm4X9 8zc/f8jwfUju1 qrh/vqB4X/ZrHisW/vDxwWaRbo9v67j/P98/g1d78 8plfN74/Hku D 6X23VcHq8 36Vg/BDK962DjzVDv9G5/Irb9Myjx51Z R74Z7fn9j0mPD7N099uuJ/un6/hMekHoWs3FjMz7tehP4j4deex6Db9cPAHOL/efN/MxP1xPH69Wuj5d762Y3Ebfg14HPr15MWlhXw4efpp6Xe/C LUAjaXPfxwWOFrNm7z5z8PD5iEse9dLjNbjzPfHz/kzMYfulyY3f3zvTV3t/noo2Ec j3C/XabnTtLLono97d11sm9uMXXePHF8Hr0ffLr2e9dbtv3yq/HXXdtWnxYqFvUvPJKiNGvJcfla/v1k v9NL3P8 aFup3uq7 u9D30B/8ddpCch2fx4w RHo9//3v4ve VX4NHHFH8q8 vHff5H/8I49bjwO/ffr35tegP/GbgD6qOP61qT0EX89j3P78fm43vva/p14W/zbP5/34te9z7PdjX82vZv/Nrw2PU79lm6fts83333z/ OMTo dyUX4W Bng88za7XhCx4uJ3L776Xb8vmduvs9 zbnPyXufGXvMeMLG5/o4r0T369W5kx4f5nTUUeF15PGb3g9f2/G6vx4DjtHvaebsD3Clvk9mA/eHNz8j7GvdjjtOOvBAqXv30npy9NFhjPn55/FQbnv99f /z020XbJ4Ta/xmlxjn332WVLeyr/LJ15dTSApjZXUf42uzutdo/9/VtAv1nwPU7/xWJQ aT0i1 EWc5EDPlN2S/aSy8NA/ gg6T /cPDqxRLPoX6zdYvdL9Q/UZgEeYZ2sbSDCxA/UDz7InFih8QfiPyQyeZSbZYtxD0m7fb8oN5l12knXeWDjkkvMEXan4j8QPaffVDujHzG9B114WcGZsfYH4I Q3Lb8h c/ID2cLAb8QWGr4nftOzILA4WHHFwMSCyv/8xuY3a8fg//vN2uf6PiSi19f1p0jPIvlh6/vnB0cu84vKnwjPOEO68MIgWEupuWdx8Ic/SOPGST/9aRCSHid Y/dD0V/75uNssWThbB5 40hEuPvnB5EfVn7Q P/uo z74MfGP6dHyRe9Wl2FgoWTeZnNn7Q Bybvbn5AeXxYu5 QPlBZu Hi3n73vjh63YtWjzG/KneDyCPSbP2hxWPV/P1h0CPI48Jf6Cw971zO47BH0DchzvvDOPTry3fa4sHj0uzs5Byn3yffH/9sPfD0uPV7SWi2r9L0m SMeAHof9v3mZjEeEY/SHUMfo15IUGFijmk23m4sUIvgdnnRVmwz2bkbyezd6M/CD1hzl7s/M1LdbdB7MzQ//se K 2d/XbbTTqFPFqYe/76/vj9m7a/ LPomTfr/MdvUa9Hx nXjDwx f/Lrwrv1 IOWP5T6dW3x5j64fd8zC26/h/mYpgqyu6/uj/vge X7bu Hm lRbzHnoVz8q2LuVqoe1x4DPg1bi5m57bcht8HLJ7MwffX5/i u9u268DjwGPOQtnj0G34deo77E/APrDsD9cWnS6T369 MOM77ffayyW3LaFvV9vFmK T0luY/p7h3/vseRvWfx 7ntgcZ Iqcbuwy23SN6jPhGT5upY/RpMPhw6Zr9HmpX77deR43Uf/I1bdtUcj1 P2UceCX3268rvYWbk8WLejtmvab/GPdZtyfuix5vHhsdtIl7dXzPxzz7f7ym N34d X3VY9X/dz8scn0/k/HuY/0sSa7l XjLUyTD3E 1 8l/rDjeDyW/dpwHxyHx6XHg1 Tfg/xM8Af1Jv6EJKP/fHHh/Y82dJc8z3xOEoEfXPbq/b51iHm4lqrxZi/yXE q59bEVjJ4rU5sTvP1eLXYrepzQuac51Szy2p2oCFUDIb44eFX3wWg77hfij6004M5hegZ678cPUbTvIG5jcZv9kls8DJV4MtHbM/NXvm1p/ckzd1PyT8oLFwqUT9Oj8Q/cD0g9wJ7v6k72v7wejZGL/pexbGFS38ybVc5g8Hni3yQ7iYr2D9gLfY8ht9skrTD65kNsX/d3v2fgj6Xvrh7IdJpc0PRT/YzNQPOj/Y/FB0HI6hUPM49UM6mQlyG35AV L JzFZ6PmbEX9IsXC0aPQ1LeL9sHVf/M3HN5VNCu1KwceZnWdW/fq0UEqu6w9JHid L/HMR3MtmZnzeLFYsVngpX8T0Nxr PyknI v5/cZCxEzLcQ8fvxNhF8jFq3JzLUFtd8H/P7amPk87wnvmVmLVr vua e7bM4shgp1fw 4TriFuDnn9 wFffXH0692toiyoK12N2R/P7njXfcD48Ff7DxhwWLbwtD98Gzs55B83tjoVxL7XNLnGfBnZ5u1pxremz7w4vfK5tr/oDgWVz7ejHv2OUJGGuTQszj1x/CSv0wUcg1ijymKuLVs6zTp0/P2JGryLgrenhJ4jU9Ij/k/CZTSj5sRXtG400S8BuovxK1eEq KvPXpy29p3WTgXJARQn4A6hFj79e9ocAf5Ap9qvcigZI41UnYOHqD7UeH57B9Qcczyr6m5VzzgmzVOV42PvbCAsnCzvPMpejzarDa4EAfvWr8GGlubOv/nbs0EPDt2T1ZE5dvOyyhjP72X10CoY3f/I3MxFZVcRrRP3PGYrFa6HGNrKFkuI4CEAAAnVGwKkh/qbIwsZfr3s21qknWPUJeBLCaRvf1IUvOSDPfo8YEWbT68k8OePUAadu5DN/y QPAE41iMwQrzluSLNnXiO7yYQDAQhAAAIQaHUEnK7kb0 akxLjNSCnnx7WgtSbOSXHM9NOmco2zzY779jfKkRoiFfEa4TDkpAgAAEIQAACzSTgxUWuQdqcRUaemTzvvMZnKJsZZlVP94JLLwz0YlrnTzu32vnWXlwe8bcIiFfEa1VfN1wcAhCAAAQgUBECzun04r9zzy29eVdzcMUg 3o1LzI0Ky8y96JYz8ZGluOajR7xinit15cj/YIABCAAgdZMwLWAvXjOvlTz9qcur2aPRUMA8Yp4jWYwEggEIAABCECgbARcrs95r/almssoekOLpA55qe1wXlkJIF4Rr2UdUDQGAQhAAAIQiIaAa7SOHBkqQZRirm/qTTzssWgIIF4Rr9EMRgKBAAQgAAEIlJWAFyK5pql9KeYd27xDnT0WDQHEK I1msFIIBCAAAQgAIGyErjoorDbm7d2LsWuvjpsQGGPRUMA8Yp4jWYwEggEIAABCECgrAT 9Kew7bd9KeaUgzffDKkHWDQEEK I12gGI4FAAAIQgAAEykrgjTekH/9Ysi/FLrlE s9/pAsvLOVszqkQAcQr4rVCQ4tmIQABCEAAAhEQWG45yduh2hdr558vffaZZI9FQwDxiniNZjASCAQgAAEIQKDsBH72M2nYMGmzzYpvevBgqU0byR6LhgDiFfEazWAkEAhAAAIQgEDZCfTsKR16qGRfrA0cGGrF2mPREEC8Il6jGYwEAgEIQAACECg7gbPOktq2leyLtZNPlr77Xckei4YA4hXxGs1gJBAIQAACEIBA2Ql4g4HHHw9VB4q1446TNt9csseiIYB4RbxGMxgJBAIQgAAEIFB2AlOnhq/97Yu1o4 WdthBsseiIYB4RbxGMxgJBAIQgAAEIFB2Au G2ZP7Yu13r1DqS17LBoCiFfEazSDkUAgAAEIQAACFSHw7W9L770n2Rdjzd1etphrcWzBBBCviNeCBwsHQgACEIAABGqSwA9 II0dK9kXY/vtJ/XtK9lj0RBAvCJeoxmMBAIBCEAAAhCoCAHnrO6/v9SjR3HNH3OM5NnXPfcs7jyOrigBxCvitaIDjMYhAAEIQAACVSdw/PFS166SfTHWvbs0aJBkj0VDAPGKeI1mMBIIBCAAAQhAoCIELrxQ ugjyb4Y22UX6bzzJHssGgKIV8RrNIORQCAAAQhAAAIVIXD99dKTT0r2xdj220uXXirZY9EQQLwiXqMZjAQCAQhAAAIQqAiBe VrrtOsi/Gtt46bG5gj0VDAPGKeI1mMBIIBCAAAQhAoCIEnnpKOv10yb4Y22wzafx4yR6LhgDiFfEazWAkEAhAAAIQgEBFCLz unTssdLDDxfX/EYbhdlaeywaAohXxGs0g5FAIAABCEAAAhUhMH9 qDZgX4x16RIErz0WDQHEK I1msFIIBCAAAQgAIGKEPjsM6ltW8m GPvOd6RnnpHssWgIIF4Rr9EMRgKBAAQgAAEIVIxAmzbSwoWSfaHWsaP0yiuSPRYNAcQr4jWawUggEIAABCAAgYoRWGMN6cUXJftCrV076c03JXssGgKIV8RrNIORQCAAAQhAAAIVI9CzpzRsmLTBBoVfYostpKefllZYofBzOLLiBBCviNeKDzIuAAEIQAACEKg6gVJqti67rPTJJ5I9Fg0BxCviNZrBSCAQgAAEIACBihEoZavXpZaSvv66YiHRcGkEEK I19JGDmdBAAIQgAAEaonAz34m/epXkn0h9vnn0oorSvZYVAQQr4jXqAYkwUAAAhCAQOsj8PLL0ve/X F H3KIdMABkn0h5nSB1VYLaQNYVAQQr4jXqAYkwUAAAhCAQOshcMMN0qWXSi 9FHTlnXdWsO9HHy3tsINkX4h9 KHUubNkj0VFAPGKeI1qQBIMBCAAAQjUN4H//Ee68krpqqukd9/9/76uskoow1oxO ecsNlA//6FXeL996WNN5bssagIIF4Rr1ENSIKBAAQgAIH6JPDqq9LFF0vXX9 wf65E5RnYX/6ygn0/80xp5ZUl 0Ls7belbt0keywqAohXxGtUA5JgIAABCECgvgg88IB02WXS/fc3XLi/9trSCScE0eqZ14rab38b8lftC7HZs6Uf/Uiyx6IigHhFvEY1IAkGAhCAAARqn8Bnn0k33yyNHCn9/e8N MJzVNOkQ4 WFpmmRbqrxX0nDlBSRdir78u7b23ZI9FRQDxiniNakASDAQgAAEI1C6BfPms7tHSS0v77htE6847V6GP114rPfecZF IzZwZVpHZY1ERQLwiXqMakAQDAQhAAAK1R C116QRI6Rx46TFizPjb9tWOuoo6dRTpXXXrWLfbrlF vOfJftCzCUQzj1XmjChkKM5pgUJIF4Rry043LgUBCAAAQjUE4EpU8JCq8mTG azusrUiSdKxx4b1klV3e67LyTe/v73hYXiWVon49pjURFAvCJeoxqQBAMBCEAAAnET8IZT48cH0friiw1j/eEPQ2pAz57St74VUV8sXB20fSH29NNhutgei4oA4hXxGtWAJBgIQAACEIiTwAcfhNqsrtE6b15mjM5n3W /oPV23DHO PX449LgwUr5QuyxxyTXhrXHoiKAeEW8RjUgCQYCEIAABOIi4MX2zmcdO7bhTqnOZz3ySOm006qcz1oIsmLTAJwTMWyYZI9FRQDxiniNakASDAQgAAEIxEHg0UfDt yTJjXMZ/VGVc5nbZH6rOXC8fLLoTaXfSH2l7 E/Fh7LCoCiFfEa1QDkmAgAAEIQKB6BL74QrrttiBaZ8xoGMeWW4Z81sMOa8H6rOXCMWuWtPvukn0hNnFi2A7MHouKAOIV8RrVgCQYCEAAAhBoeQIffSSNHh0mGufOzbz UktJP/1pyGe19qtZe cdaYstJPtCzCWybr2VUlmFsGrhY5olXseMGaPnvikh0a1bN/Xr129J IsWLdKoUaP0xhtvaIUVVtB3v/tdzUwr9Lv uvrxBNPTP3NNmHCBD344IOp/7dv317DnGfyjS1YsEBDhw7V4m Kx/Xp00c7pmWET506VWOdjCOpTZs2GjJkiDp06FAyyukz39fWm6xW8vmcCAEIQAACEKgFAhaqzmf9wx k//43M2I/nnv3ln79a2mDDWqhN03E6A527y799a FdeaPf5TuvVeyx6IiULJ4nTRpktZaay1ttdVWWrhwoS666CIddNBBqZ9tFradOnVSjx49NGPGDN1www06 OCDtXOObTUsPsePH6 BAwdqpZVWSgnVzp076zRngEsaNGiQOnbsmPrZIvehhx5K/W7dddfV7NmzNXz4cPXq1SslaP17W7r4LZY44rVYYhwPAQhAAAK1ROD556WLLgqTil9 mRn56qtLxx8f/q26ai31qolYXeNrxRUl 0Lsppukhx W7LGoCJQsXrN7kS5WZ82alZoJHTBggNq1ayfPwg4ePFjbb7 9errwW5ali1P/yQL1iSeeSM2gerY2EbYWq8ksrEWw2xoxYoTmz5 /RKymC2EfX4ohXkuhxjkQgAAEIBAzga /Dumbzmd94omGkW6ySUgN6NNHWm65mHvSjNhc08uJvfZN2XXXSdOmSfZYVATKIl6zZ1490zplypSMtAAL1A9cJE7SPvvsk5qRtWWLUf/OAnTcuHHq3bu35s2bt0TIJqkA6bOr2cLXM7Gedd1jjz1yCuVC6CNeC6HEMRCAAAQgUAsEFi2SbrxRuuwy6Z//bBix81j9RafzWuvePPP6/vthBrYpu/rqsAuDPRYVgbKIV8 62pKcV6cUvPLKKxniNTnGqQVOMfBX/BawucRmunidNm2a5syZk5HHmohXpxlkpxggXqMaXwQDAQhAAAJVIvCf/0iXXx42FvD/023ZZaVDDpEGDpQ226xKAVbjsl4P48K1hayL8Yyrd2M4 xqRMo1GyHQLPGaLMrq2rVrKv91tJcqplmXLl1SqQNelJUucNNnZt2GBWiSBuDTmXllzEIAAhCAAARKI2BtNny4NG6c9M065yUNtWsnHXusNGCAtNZapbVf02e5015oXkjnL7kkVCawx6Ii0Czxmp7nmt6rXDmvrjzQvXv31IIui9c77rhDZ5xxRionlpzXqMYEwUAAAhCAQA0S8C6mrhyQa1OBLl2CYHVRoEK Ma/B7hcW8vrrSw88INk3Za56tHBh2GULi4pAyeI1V2pAes yqw0kYnX55ZdPldByOawkzYBqA1GNCYKBAAQgAIEaIfDVV9IddwTR uyzDYPedtuQz q10oWsUaqRbpce5ve/L91 u2TflJ1/vvTZZ5I9FhWBksVreo3XpEfpC7Eaq/PqGq9vv/12KqXAqQU26rxGNS4IBgIQgAAEIibwySdhEfzIkQ03jPKmAl4Tffrp0o9 FHEnqhHa4YcHMN6soClzrqvLLpDz2hSpFv97yeK1OZFa2Fr8Wuwm4rU57ZX7XKoNlJso7UEAAhCAQDkIOAXTu2Bdc430TQGfJc22aRM2FfAirLrYVKAcwLLb8AZHTghO2 go72VcN95Jwt/Uj69EOLRZGoGqiFfnvE6fPj1jR67Swq/MWYjXynClVQhAAAIQKI3Aa6 FTQVuuSV8k51u3kjgV78KOa11talAaagaP8t1wQYPLmyfW dbeGHXNxsmVSIc2iyNQFXEa2mhttxZFq FGtvIFkqK4yAAAQhAoFgCjz4aFrv/ c SNxlIN8 unnKKdOSR0jc7rRfbfOs73sVsTzihsKK2J50UprDtsagIIF5z3A5mXqMaowQDAQhAoFURSBZhWbS6qlO2bb99mAw84ADJ a1YEQQMzXmv9k2Zp7M33TRMa2NREUC8Il6jGpAEAwEIQKC1EmhsEZYrBfz852GtUSHpmq2VYZP9PuywANK KXNdMZdrsMeiIoB4RbxGNSAJBgIQgEBrIzB/ftgJy7uQLliQ2XsvwurTRzrjDGm99VobmQr01zkWLsFg35T17Svtuqtkj0VFAPGKeI1qQBIMBCAAgdZCwDtheRGWd8L69NPMXrMIq0Kj4LjjpM03l ybsl/8IuTG2mNREUC8Il6jGpAEAwEIQKDeCTiP9be/lSZObLgIy7OrXoR19NEswqrIOPj1r6V11ilsEdbBB4fdHeyxqAggXhGvUQ1IgoEABCBQjwRcKeDee6WLL5amTm3YQ6dWOp/1wAPZCaui97 Y2q0HHRRmXffbr6Ih0XjxBBCviNfiRw1nQAACEIBAQQRck3Xs2FDuyrVa082VAvyttCcDd9mloOY4qLkEhgwJnw7sm7J99pGOPVayx6IigHhFvEY1IAkGAhCAQD0Q PBD6aqrwm5Y3hUr3ZZdVurVSzrzTGmjjeqhtzXUhwsvlD76SLJvyn7yk5BeYI9FRQDxiniNakASDAQgAIFaJvD222GWdcwY6eOPM3uy8sphIs81Wtdcs5Z7WcOxX3qpNHeuZN Ude8etoa1x6IigHhFvEY1IAkGAhCAQC0ScEqAF2H98Y/SF19k9sA7jHrr1l/ UrKAxapI4MorpVdekeybMpfJOvfcUC4Li4oA4hXxGtWAJBgIQAACtUTgiSdCuatc27d27RpmWXv3lpwqgEVA4A9/kJ56SrJvyrwbxPDh7ArRFKcq/B3xinitwrDjkhCAAARql4ArB7jMlUXrtGkN 7HTTtLAgazzifIO33yzNHmyZN U/fCHIWnZHouKAOIV8RrVgCQYCEAAArES PzzsKGAy129 mpmlK4c4F1HBw WunWLtQfEpTvukG6/XSnflG21lXTddZI9FhUBxCviNaoBSTAQgAAEYiPgxeneutWTcF6QlW7LLScdfnioHLDBBrFFTjwNCDi/w8L1hhuahuOduDxDa49FRQDxiniNakASDAQgAIFYCFiojhgRKgf897 ZUXnhlRdgeTcsKgfEcscKiOP 0OlAfumzEnLEyZI9lhUBBCviNeoBiTBQAACEKg2AS9GdxnQ226TnCqQbknlgF/9SmrbttqRcv2iCTzyiHTeeZJ9U/a974WVePZYVAQQr4jXqAYkwUAAAhCoFoEpU0I 6wMPNIxgk03C9q1UDqjW3SnTdV1pwDfSvinr0kV6 GHJHouKAOIV8RrVgCQYCEAAAi1J4MsvwwyrNxZ4/vmGV3blAG/f6h1CvSgLq3ECzz0X8j3sm7K99w4ltb7znaaO5O8tTADxinht4SHH5SAAAQhUn8Cnn4Y1Oy7jOWtWZjwWqfvuK/3mN1QOqP6dKnMEf/972JvXvilzMvPf/kZSc1OcqvB3xCvitQrDjktCAAIQqA4BL7y65pqwZueddzJjWH75kBZwxhlUDqjO3WmBq3orNNc0s2/KVl1V sc/JHssKgKIV8RrVAOSYCAAAQhUgsD770sjR0pXXSV98EHmFVw5oF /kApJ5YBK0I ozTffDNu92jdlHhhz57Knb1OcqvB3xCvitQrDjktCAAIQaBkC8 aFnbBc7uqTTzKvufrq0sknSyecIK20UsvEw1WqTMD1z7yLRHbB3lxhrbii5E899lhUBBCviNeoBiTBQAACECgHgddfD WuvCNWdrmrddcNs6zHHCO1aVOOq9FGzRCwGN144yBKm7Jllw2feOyxqAggXhGvUQ1IgoEABCDQHAJeh3P dKdd0pffZXZkstdOZ/VO2J961vNuQrn1iyBjz Wtt66sJxXr9z7 uua7Wo9B454RbzW8/imbxCAQCsh8PjjYaZ18uSGHd5mm7B96377Ue6qlQyH/N10mQnnsto3Zq6h5r1/7bHoCCBeEa/RDUoCggAEIFAogfvuC6J16tSGZ y exCt3bsX2hrH1T0Bz6QuvXTTM6qLF0vt2kn2WHQEEK I1 gGJQFBAAIQaIyA0wFuvz2I1hdfzDySGq2MnSYJLLNMEKX2 cw11bwXsD0WHQHEK I1ukFJQBCAAARyEfDCqxtvDBsLeEFWulmHHHZY2Fhgo43gB4FGCHz729J770n2 cz11NZbr2FdNcBGQQDxiniNYiASBAQgAIF8BP73P2n0aGnEiIYVjlwt4KijwkKszp1hCIECCLRvL/3rX5J9PrO43XTTIHKx6AggXhGv0Q1KAoIABCBgAh9 KF1 efi3YEEmE6 5Oe446bTTpI4d4QWBIgissUbIN7HPZ// t7TttpI9Fh0BxCviNbpBSUAQgEDrJjB/fti 1bthffRRJgtvLDBggHT88dIqq7RuTvS RALrrCM99ZRkn8/mzJFOOkm6554SL8JplSSAeEW8VnJ80TYEIACBggk0thuWUwK8sYC3cWVjgYKRcmAuAuuvLz3wgGSfz5xUvffeDZOrIRoFAcQr4jWKgUgQEIBA6yXgSa7f/jYsxvrss0wOG24oDRok9e7d OLw1kuPnhdNYM89pd//XvKuFfns1VdDYWB7LDoCiFfEa3SDkoAgAIHWQeC114Jo/eMfpS yOzzZptJZ50lHXxwKMuJQaBsBLbYInxSss9n3qqtVy/JHouOAOIV8RrdoCQgCECgvglYDwwdKt19d8MtXL0blstd7btvfTOgd1Uk4IVYV1wRFmTlsxkzpGOOkeyx6AggXhGv0Q1KAoIABOqTwLRp0vnnS3/ c8P /ehHQbT Mf12Xd6FRGBnXaShg2T7PPZM89IJ5wg2WPREUC8Il6jG5QEBAEI1BeBhx4K6QGPPNKwX3vtJZ17rrTddvXVZ3oTMQHvGzx4JMJ1HwAAIABJREFUsGSfz7zf8MCBufcdjrhrrSU0xCvitbWMdfoJAQi0MIFJk4Jo9YxruiVbuJ5zjrTlli0cFJeDgKsInHxyqCaQzx59NHyqsseiI4B4RbxGNygJCAIQqF0CX30l3XlnEK0vvJDZj299KyzA8qRX166120cir3ECP/95yGe1z2dTpoTUAnssOgKIV8RrdIOSgCAAgdoj8OWX0s03h d9dnWhZZcNpa4sWrt0qb2 EXGdEejZUzr0UMk n/3lL6Gclj0WHQHEK I1ukFJQBCAQO0Q Pxz6Q9/kC66SHrzzcy4vZnA0UeHOq1rr107fSLSOifgElg9eoRSWPnsT3 Srr1WsseiI4B4RbxGNygJCAIQiJ/A4sXS6NHS8OHS229nxtu2rfTLX4YdsRrbPj7 XhJhXRLo21fadVfJPp/ddVf4KsEei44A4hXxGt2gJCAIQCBeAosWSVdeKV1yifTuu5lxtmsnnXiidOqpkv PQSBKAmecEZKujzgif3i33RaEqz0WHQHEK I1ukFJQBCAQHwE/ve/kAJ46aXS 9nxrfqqtIpp0gnnSSttFJ8sRMRBDIIuH7rxhuHOq75zML1r38N TBYdAQQr4jX6AYlAUEAAvEQ PBD6fLLpZEjpQ8 yIxr9dWl006Tjj9e va344mZSCDQKAF/NeAkbPt85u1jXSbLHouOAOIV8RrdoCQgCECg gQWLgypAd5F0wI23Tp1kn79a m44yQvysIgUFMEvILQeS32 ey660KBYnssOgKIV8RrdIOSgCAAgeoRWLAgfFN61VXSxx9nxuHJKqcL9usnLb989WLkyhBoFoGzz5aWW06yz2fXXCP97W SPRYdAcQr4jW6QUlAEIBAyxPw4iuLVlcQ OSTzOt/97thkuqooyTXbMUgUNMELrhAcrkM 3w2apT0j39I9lh0BBCviNfoBiUBQQACLUdg3jzpd78L3476eZ5uG2wgnXlmWJTt3bEwCNQFAdd386pD 3x22WXSnDmSPRYdAcQr4jW6QUlAEIBA5QnMnRsmnm64Qfrss8zreSH2WWdJv/iFtPTSlY FK0CgRQl49aF31LDPZxdfLL33nmSPRUegZPG6YMECDR06VIsXL1b79u01zHsCptm8efN0wQUX6Isvvkj9tk fPtpxxx3zApgwYYIefPDB1N z20u/Vq62pk6dqrFjx6bObdOmjYYMGaIOHTqUDHv6zPe19SarlXw J0IAAhCIlcCsWUG0jhsneXesdNt007CF60EHIVpjvX/EVQYCTuh 6aWQ2J3PLrxQ ugjyR6LjkDJ4jXpyYgRIzR//vwM8bpo0SINHjxYa621lk477TRNnjxZ9957r8444wytu 66DSBYfI4fP14DBw7USiutlBLFnTt3Tp1rGzRokDp27Jj62SL3oYceSv3Obc2ePVvDhw9Xr169UuLYv7dli liyCNei6HFsRCAQC0QeP11aehQ6Y9/lL78MjPiLbcMovWAA2qhJ8QIgWYSKKSSwHnnSZ58s8eiI1AR8ZouRi0wEzG70UYb6dhjj20AIV2c o8WqE888URqBnXmzJlLhK3bSmZhd955Z/Xs2VPZ4jn72qUQR7yWQo1zIACBGAm89po0ZIh0xx3SV19lRrjNNmHB9T77xBg5MUGgQgT8tcMjj0jXX5//AoVUJKhQeDTbNIGKiFfPtN53330666yz1MkFAb ZPbXPnhHNFqM xgJ03Lhx6t27t5x kAjZJBUgfXY1W/h6JtbX2GOPPVLithRDvJZCjXMgAIGYCLzyinTOOWGHy6 /zoxshx2CaN1775giJhYItBCBW2 V7rlHss9nXqm48sphxSIWHYGKiFfPnD7yyCPq3r279t9/f82aNUsXX3yxVl555QbiNZfYTBev06ZN05w5czLyWBPx6jSD7BQDxGt0Y4yAIACBFiTQmGjdZZcgWvfYowUD4lIQiI3AnXdK48dL9vns9NOlNdeU7LHoCOQVr/6qf9SoUXrjjTcygu7fv7 22mqrJb/LlfM6Y8aM1Myrc2E//fRTrb/ qn/t23bNiVC042Z1 jGBAFBAAI1SMCi1cL07rsbzrTutlsoh7XddjXYMUKGQLkJ/OlP0rXXSvb57OSTJRc4tseiI1CRmVfPtHr1/4ABA9SuXbsGearZFMh5jW5cEBAEIFAjBCxavdjK34JmpwcgWmvkJhJmyxK4/37p0ksl 3x2/vnSOutIffu2bGxcrSACFRGvvvKYMWNS a49evTQtddeqxdeeEFnn3221vQ0fJZRbaCge8VBEIAABJYQsGj9zW kiRMbitbdd5d 1tmWhkuEMhJwIu1XEXAPp/17y/5W2Z7LDoCFRGvTjkYOXJkKtd1qaWW0tJLL52ahd3Yla /qSbgmq7ptV p8xrd2CAgCEAgQgJ//3tYiJVLtDqX1TVcSQ I8MYRUjwEpk6VBg706vD8MXkv5J12CnsiY9ERaLZ4LaVHznP1BgYHHnhgoxsXlNJ2Oc6h2kA5KNIGBCBQTgIWrc5ptWjNNkRrOUnTVt0TeOYZ6YQTJPt81qeP1L27d1iqexy12MGqiFfPsj733HPN2kigkrARr5WkS9sQgEAxBCxandN6770Nz/Kz1RsAdetWTIscC4FWTuBvfwu5rPb57LDDpJ//XLLHoiNQFfEaHYWsgCxeCzW2kS2UFMdBAALFELBodU5rrgXRiNZiSHIsBLIIOGHcdeDt85n/fuih4TgsOgKI1xy3hJnX6MYpAUGg1RCwaD3rLGnSpIZd3nPPUPKKmdZWMxzoaCUIeK9k79Bhn8/22y/Mztpj0RFAvCJeoxuUBASB1kigMdH64x H6gGI1tY4Muhz2Qm89ZbUr580eXL pn/2M lXv5LssegIIF4Rr9ENSgKCQGsi8PzzYSHWffc17DWitTWNBPraYgTmzQtlsOzz2V57SaeeKtlj0RFAvCJeoxuUBASB1kDAotUbDubKafVkjwXtD3/YGkjQRwi0MIH335dcutM n7lYsldK2mPREUC8Il6jG5QEBIF6JtBYyStP8rhOK kB9TwC6FvVCXz0kbT22pJ9Ptt555Bgbo9FRwDxiniNblASEATqkYAXNntzgbvuargjlteO Dm55Zb12HP6BIHICCxaJHXoINnns 23D1vI2mPREUC8Il6jG5QEBIF6IvDaa0G03nFHQ9HqklfeQp0dserpjtOX6Al88YXUpo1kn8/89cc11/A1SKQ3E/GKeI10aBIWBGqbgKvwOKf11lulr77K7Mtuu4WZVkRrbd9joq9hAkstFV6Y9rmsV69Qs27TTWu4k/UbOuIV8Vq/o5ueQaAKBObMCaJ13Djpyy8zA9hxR2nYsLBlOgYBCFSRwHLLSR9/LNnnsu9/X7r9dskei44A4hXxGt2gJCAI1CKB996Thg6VrrtO uyzzB44bc5/8yYDGAQgEAGBtm2ld96R7HPZRhuFPZntsegIIF4Rr9ENSgKCQC0RWLBAuvBC6corG67/cClJ57T 9Ke11CNihUArINC vfSvf0n2uWy99aQpUyR7LDoCiFfEa3SDkoAgUAsE/I3jJZdIl13WsOJO165hpvXAA/On1NVCH4kRAnVLYI89QkJ6x465u9i5s/Tkk5I9Fh0BxCviNbpBSUAQiJmAq uMGiUNHy795z Zka6/fsh3/cUvpKWXjrkXxAaBVk7AdV6nTQv1XnNZp07SjBmSPRYdAcQr4jW6QUlAEIiRgKvqOJ/1vPMa7irp55834zn6aGmZZWKMnpggAIEMAk2lBXhG1sWZ883MgrOqBBCviNeqDkAuDoHYCXz9tXTbbWG7Vpe/SrfVV5fOPFM67jhp eVj7wnxQQACSwh4e9h77gnbxOaypnJiQVlVAohXxGtVByAXh0DMBP7yF k3v5Gefz4zylVWkU4/XTr1VGnFFWPuAbFBAAI5CWy2mTR vGSfy5qqRgDWqhJAvCJeqzoAuTgEYiTw3HPSCSdIf/1rZnTelMe/t6Bt1y7GyIkJAhAoiMDWW0vXXivZ5zK/2BcuDDtxYdERQLwiXqMblAQEgWoR8FauZ5whTZyYGYHzWI88MlQQYP1Gte4O14VAGQm4 PKll0r2uexb3woFm 2x6AggXhGv0Q1KAoJASxN4662Q0 pdsdK3cvXOkQcdFHbF6tKlpaPiehCAQMUI7LJLWH1pn8v84nfCOxYlAcQr4jXKgUlQEGgJAh98IF1wQdhg4NNPM6 4117SxRfnT4lrifi4BgQgUCEC3btLgwZJ9tnm0iJOF7DHoiSAeEW8RjkwCQoClSTgWq3 xtDi9MMPM6/kFLiRI6WddqpkBLQNAQhUlYC3vXMCe67t7xYvlnbYIdR5xaIkgHhFvEY5MAkKApUg0FitVlfM d3vpP33r8SVaRMCEIiKwH77SX37SvbZ9tFHYfMCeyxKAohXxGuUA5OgIFBuAnfcETYS Mc/Mlteay3p3HOlo45ibUa5mdMeBKIl4Bf8z34W9nDOtgULpA02kOyxKAkgXhGvUQ5MgoJAuQg89ph02mnS9OmZLbpW68CB0imnSCusUK6r0Q4EIFATBLyHs1MG7LPt3XelzTeX7LEoCSBeEa9RDkyCgkBzCbzwgvTrX0sPPtiwpZNOkoYMkTp0aO5VOB8CEKhJAk4Z2HXXkDqQbXPnStttJ9ljURJAvCJeoxyYBAWBUgm8 WbYROCPf8ysdLP00lKvXiGvdZ11Sm2d8yAAgbogcOyxUrdukn22zZol7b67ZI9FSQDxiniNcmASFASKJTB/fthEwJvmfP555tl77x0qC2y6abGtcjwEIFCXBI4/XuraVbLPNifG9 jRMEG LkHUZqcQr4jX2hy5RA2Bbwj897/S8OGh9NUnn2Ri2WKL8PvddgMXBCAAgTQCTnbv3DkkvWfbK69IPXtK9liUBBCviNcoByZBQaApAt650ZsLOA3g/fczj95wQ n886WDD26qFf4OAQi0SgJerbnaamHVZrY5Yb5PH8kei5IA4hXxGuXAJCgI5CPg7VvHjg0LrubMyTzKZa/8 6OPpuwVIwgCEGiEgBPjV1wxJMhn23PPSb/8pWSPRUkA8Yp4jXJgEhQEchGYODE8a15 OfOv7dtLZ5whnXyytPzysIMABCDQBIHzzgvbv9pn29NPS6eeKtljURJAvCJeoxyYBAWBdAJTp4ZnyTPPZHJxfVaXvTrrLGnllWEGAQhAoEACF14YdtCyz7bHHw87mthjURJAvCJeoxyYBAUBE3jppTCj uc/Z/JYZpmwI5bzWldfHVYQgAAEiiTgsiTeQWvQoNzi9Q9/kG66qchGObylCCBeEa8tNda4DgQKJvD669I550i33SY5xzWxpZYKi4Avukjq0qXg5jgQAhCAQCaBUaNCKSz7bLv//lCmxB6LkgDiFfEa5cAkqNZJwAuwXKvVEx5ffpnJoHv38DzZbLPWyYZeQwACZSQwerQ0Y4Zkn22TJknXXCPZY1ESQLwiXqMcmATVugi8915YNzFmjOQSWOnmWq2eHNlpp9bFhN5CAAIVJHD99dKTT0r22Xb33aGkiT0WJQHEK I1yoFJUK2DgFPOXKf1qqukRYsy zdsCxo99 /dbCglxCAQAsSuPlmafJkyT7bbr9dmjBBsseiJIB4RbxGOTAJqr4JeJGvt2u9/HLJO2Sl2/e J517rnTYYZJzXDEIQAACZSfQmEC95ZawStQei5IA4hXxGuXAJKj6JODtW0eOlC65RPrgg8w eqdGL9Lq25cNBurz7tMrCERE4J57pBtvlOyzzb9/9NHwdyxKAohXxGuUA5Og6ovAp5 G1IBhwyTnt6Zbp06hTuuxx0rLLVdf/aY3EIBApAQ8s3rFFQ3r8DlcJ9 7qLQ9FiUBxCviNcqBSVD1QeDzzyWXS7zgAunf/87s06qrhhquJ5wgebMBDAIQgECLEZgyJXyats82f9J2kWl7LEoCiFfEa5QDk6Bqm4B3XbzhhrAY6803M/uyyiphtyz/a9u2tvtJ9BCAQI0SaGwXLSfj/ tfISkfi5IA4hXxGuXAJKjaJGDR6sozFq2zZ2f24dvflk48Mcy2tmtXm/0jaghAoE4IPPus9PvfS PGNeyQk/LfeSck52NREkC8Il6jHJgEVVsEkvQAbxPujQbSrU0b6Ze/lH7zG2m11WqrX0QLAQjUKQFvUHDMMWGjgmzzG5lLothjURJAvCJeoxyYBFUbBCxar7suvMe/9VZD0dqvXxCta6xRG/0hSghAoJUQcE7roYeG3NZs8/7T3pf6zDNbCYza6ybiFfFae6OWiKtOwKLVC3G93iGXaHXlAFcQQLRW/VYRAAQgkIvAP/4h9egh2Wfb4MGSvzKyx6IkgHhFvEY5MAkqTgIWrddeG0Tr3LmZMbpiQP/ 0qBBiNY47x5RQQACSwh4JemuuzZcUeoDnJjfoUPwWJQEEK I1ygHJkHFRcB1WpOZ1uySVyuuGESrv2Hr2DGuuIkGAhCAQE4Cb78tdesm2WebS6GsvXYoiYJFSQDxiniNcmASVBwEvHXrNddIl10mzZuXGZNF63HHhckJRGsc94soIACBAgm8/7608caSfba5LMqGG4byKFiUBEoWrwsWLNDQoUO1ePFitW/fXsP8PWKaXXPNNXr eeX/KZt27a64IILtEKeauQTJkzQgw8 mDo u730a/nvffr00Y477rik7alTp2rs2LGpn9u0aaMhQ4aog6f8S7TpM9/X1puwLLpEfJxWBwTmzw8lDq 8Ulq4MLNDLnn1q1 F9IBmvMzqgBJdgAAEapaAqwl4dtU 21weZYstQpkULEoCJYvXpDcjRozQ/PnzG4hXC1sL1YEDB2rRokUaNWqUunfvrq222qoBCIvP8ePHp45daaWVUqK4c fOOu2001LHDho0SB07dkz9bJH70EMPpX637rrravbs2Ro fLh69eqVErT vS1bTBdDH/FaDC2OrScCzmP1QlvvirVoUWbPLFS9G9bJJ/sDZj31mr5AAAKtjsDixaHgtH22HX20tMMOkj0WJYGKiVeLyPXWW0/HetlxaqvgMdp6661zitd0cepjLVCfeOKJ1AzqzJkzlwhbi9VkFnbnnXdWz549lS2e04Wwjy/FEK lUOOcWibw2mthY4Hx4yVvNJBuSeqX81qdKoBBAAIQqHkCLoW1zDKhJFa29ekjde/ur3lrvpv12oGKideRI0emhKdtww031EYbbaQeLkuRZdli1H 2AB03bpx69 6tefPmLRGySSpA uxqtvD1TKxnXffYY4 UuC3FEK lUOOcWiTw3HPSBRdI994rff11Zg cDjZwoNS7d3iPxyAAAQjUFYEf/Uh69FFp6aUzu X6r/vtF rAYlESqJh4XbhwoS666KLUTKmtW7du6ueK5VmWS2ymi9dp06Zpzpw5GXmsiXh1mkF2igHiNcpxRlCREZg4URo5MrxvZ5tTvc45R9p//8iCJhwIQAAC5STgNTjWKNlrcQ48UOrVS7LHoiSQV7wmeapvvPFGRuD9 /fP Oo/V85rdo7r5MmTNXHixNRCq 233z6jPWZeoxwXBFWHBFzuyusaXTngmy9FMnq5115hEZZLH2IQgAAE6p7AKquE/azt0 3nPw9bx9pjURKoyMzrrFmzNHr0aFnodunSRTNmzEhVA/je976n448/vgEIcl6jHBsEVScE/vMf6YorpKuukt57L7NT3/qW5Owaz7R27VonHaYbEIAABAoh4Bp/r7zSsNbfT34inXSSZI9FSaAi4jVJGfDqf eeXn755amKBLvttlvOvFeqDUQ5Ngiqxgm8/rp0ySVhtjW7coDLXR11lOSCHiWua6xxOoQPAQi0egLf Y70zDOSfbp5darTBnbZpdUjihVARcSrO5u YMs/p e8JjVd0 u1Uuc11iFCXLVGwHmsl14qTZrUcBFWp06h7rbrtGZ/U1Zr/SReCEAAAs0isN560pQpkn26WbSedx7itVlwK3tys8VrKeE5z9UbFhx44IEZmw2U0lYlzqHaQCWo0mYlCXz2mXTrrWFjgRkzGl5ps83CToe/ IW07LKVjIS2IQABCNQIAZdUueeesNNWunltjmcAstbo1EivWkWYVRGvnmV97rnnmrWRQCXvDuK1knRpu5wEvLOhd8G6 mrp3XcbtvzjH4fUAHsMAhCAAATSCGy uXTzzZJ9unXrFvbFtseiJFAV8RolibSgLF4LNbaRLZQUx5WTwN//Lo0YEWZbXUUg3ZZbTjrssFCjlUVY5aROWxCAQF0RyCdS84nauup8bXcG8Zrj/jHzWtuDul6j90Yw/obLqQGPP96wl6uvHrbidkEP/x DAAQgAIFGCHgLWK9qtU 3TTaR7rpLsseiJIB4RbxGOTAJ6v8JuIb2mDEhNWD27IZkvKnAgAFhcaxnXTEIQAACECiAQN 0tFHSzvvnHnwBhtIkydL9liUBBCviNcoByZBSU4N8JoBpwYsXpxJxPVZXT/bopVqLowWCEAAAiUQ8M4sXslqn26dO0tPPinZY1ESQLwiXqMcmK01qM8/l 64I2wq8PTTDSm0axcmCixa11mntVKi3xCAAATKQGCffaRjj5Xs0801BV22xR6LkgDiFfEa5cBsbUG9805IC7j2Wsn/zzaXunIua58 Dbfhbm2s6C8EIACBshA48MCQb2WfbqutJr36qmSPRUkA8Yp4jXJgtpagnngilLry2gDPuqbbMstI 0nnXACqQGtZTzQTwhAoAUJuCyL86/s023llaW5cyV7LEoCiFfEa5QDs56D t//wpatLiP44osNe7rGGuGbLO Cteaa9UyCvkEAAhCoIoEjjpB2312yT7dttw0lXdq0qWJwXLoxAohXxCuvkBYi8Mor0qhR0i23SP/9b8OLejMXz7IedBC7YLXQLeEyEIBAaybQr59koWqfbl4R620L7bEoCSBeEa9RDsx6Ccrvf7ffHmZZp05t2KsVVgjfWJ18suS8VgwCEIAABFqIgBcSeCcX 8S /lpaemnJHouWAOIV8Rrt4KzlwFyP1bmsN9wgeQvXbPve96T /UPlAFcQwCAAAQhAoIUJnHJKKIdln5i3LHSua/bWhS0cGpdrnADiFfHKa6RMBLwD1p/ FKoGPPBAww/uXoDltQHeBWvPPct0UZqBAAQgAIHSCAwbFoSqFxgk5pyutdbKndtV2lU4qwIEEK I1woMq9bV5L//HXbA sMfwgLVbPvOd0JKlWdaWYDVusYGvYUABCImcM45kmcV7BPzlobeWcsei5YA4hXxGu3gjDmwL7 UJk0KovUvf5E865puSy0VZlc9y rZVvL Y76bxAYBCLRKAr/7nfTxx5J9Yi607T23cxXcbpWQ4uw04hXxGufIjDSqt94KGwlcf7309tsNg1x1VenII6XjjpPWWy/SThAWBCAAAQhII0aEN3L7xObMkXbaSbLHoiWAeEW8Rjs4YwnMs6z33htEq3NZs2dZHecuu4TarD17SsstF0vkxAEBCEAAAnkJeB9u76Rln9jrr0t77y3ZY9ESQLwiXqMdnNUOzLOsLnHlWdZc3yB550DXtnZqgFOkMAhAAAIQqCECzvt65pmQ/5XYzJnSAQdI9li0BBCviNdoB2c1AnNdVm/V6sVXDz3UsGKAc1l33TXMsno77GWXrUaUXBMCEIAABJpNYNy48HWafWIvvCD16SPZY9ESQLwiXqMdnC0ZmHe/Gj1auvnm3ItMO3aU vYNs6zksrbkneFaEIAABCpEwDvITJgQdpJJbMYMafhw6dZbK3RRmi0HAcQr4rUc46gm23A5v/Hjwyzrs8827IJnWb3ttWdZ99 fWdaavMkEDQEIQCAfgYkTQ16YfWLeCnHgwNxbIkIyGgKIV8RrNIOxpQJ54okgWO 4Q/rkk4ZXdV1Wz7K6Nuu667ZUVFwHAhCAAARalMDDD4eZ16uu v/L ncXXCDZY9ESQLwiXqMdnOUM7L33pBtvDB yX3utYcvOXd1nH moo8JCU qylpM bUEAAhCIkMAjj0jnnSfZJzZ5sjRypGSPRUsA8Yp4jXZwNjewL74IGwnccIP05z9L/jnbNtkkCFbPtLp6AAYBCEAAAq2EwNNPS6eeKtknliuVoJXgqKVuIl4Rr7U0XguK1YuvrrsuLL6aP7/hKW3bSgcfLB19tLTDDgU1yUEQgAAEIFBvBLw465hjJPvEnE/mBVz2WLQEEK I12gHZzGBLVwo3XJLmGWdPj33mdtvHwTrYYdJK65YTOscCwEIQAACdUfg5ZfDTIZ9Yp71cMqAPRYtAcQr4jXawdlUYN7pyiX6LFj9Tc nnzY8o1MnqXfvkBqw0UZNtcjfIQABCECg1RDItZuWF0Y8 WRYIIFFSwDxiniNdnDmC8zvNxasN90k/fvfDY/y9qxefHXkkSy qrmbS8AQgAAEWoqAt1F07ph9YldfLb34omSPRUsA8Yp4jXZwpgf28cehZrQrBrgMXy77wQ CYPVMa4cONdEtgoQABCAAgWoRcBmaTTeV7BO7/HLpX/ S7LFoCSBeEa/RDs6vvw5btHqG1Vu25qrJuuqqUq9eQbRuuWW0XSEwCEAAAhCIjcBHH0ldu0pz52aK1w8 kM49N7ZoiSeNAOIV8RrdC2L27FAtYOxYac6chuG5BuuPfxwE6377sfNVdDeQgCAAAQjUAgEvlFh55cwFE efL332mWSPRUsA8Yp4jWJw/u9/0m23hbQA74CVy/ztTp8 0hFHSKuvHkXYBAEBCEAAArVMwPuA 2u xH7zm1COxh6LlgDiFfFatcHp94tHHw2C9c47JQvYbOvYMZS2smjdeuuqhcqFIQABCECgHgm0aSO51qK97fTTpTXXDB6LlgDiFfFalcF56aXSZZdlphqlB LSe85l3XffqoTHRSEAAQhAoDUQaN E6rbcAAAWG0lEQVQ LNCyt514orThhsFj0RJAvCJeW3xweqbV arZts02oR6rZ1pXWaXFw KCEIAABCDQ2gi4GLh32LK39esnbbtt8Fi0BBCviNcWH5zPPSdZqNr8ftG3b8hjZROBFr8VXBACEIBA6ybQpYv08MOSvc05at27B49FSwDxinityuB0CSznvPo9AoMABCAAAQhUhcAmm4RajPa2Qw6RDjggeCxaAohXxGu0g5PAIAABCEAAAhUlsP/ oaard7mxuf6ivw60x6IlgHhFvEY7OAkMAhCAAAQgUFEC3h72kkvCNrE2rxS2eHUxcSxaAohXxGu0g5PAIAABCEAAAhUlsMce0llnSfa23XaTzjkneCxaAohXxGu0g5PAIAABCEAAAhUl0KOH9MtfSva27beXXMvRHouWAOIV8Rrt4CQwCEAAAhCAQEUJHHSQ5MLi9rYtt5Suvz54LFoCiFfEa7SDk8AgAAEIQAACFSWQXRoru/pARS9O46USQLwiXksdO5wHAQhAAAIQqG0C/ftLW20l2duy677Wdu/qNnrEK K1bgc3HYMABCAAAQg0SmDgQKlzZ mEE8Jha60leScdeyxaAohXxGu0g5PAIAABCEAAAhUlcOaZ0sorS/a2Dh2k118PHouWAOIV8Rrt4CQwCEAAAhCAQEUJXHCBtHixZG9zvVdvF9umTUUvS PNI4B4Rbw2bwRxNgQgAAEIQKBWCbgs1ty5oTyWbamlwt7lWNQEEK I16gHKMFBAAIQgAAEKkbgmmukv/1Nsl 0KKQL2GNRE0C8Il6jHqAEBwEIQAACEKgYgbFjpSlTJPsFC6QNNggei5oA4hXxGvUAJTgIQAACEIBAxQhMmCDdeqtk7/SB7bYLHouaAOIV8Rr1ACU4CEAAAhCAQMUIPPigdNdd0tVXS//8p/TTnwaPRU2gZPG6aNEiDR48WB9//HGqg926dVO/fv1S//ffRo4cqVmzZmkpJz9/Y nHZFOZMGGCHvQgktS fXsNGzZsySELFizQ0KFDtdgrAiX16dNHO 6445K/T506VWM95S8vEGyjIUOGqEMzylxMn/m tt5ktahvHMFBAAIQgAAEINBMAo8/Lg0eLNm/8IIFRvBY1ARKFq TJk3SWmutpbfffluzZ8/W3LlzddBBB2kr71QhacyYMerUqZN69OihadOmady4cTr00EO18847NwBi8Tl /HgNHDhQK620Ukqodu7cWaeddlrq2EGDBqljx46pny1yH3roodTv1l133dS1hw8frl69eqUErX9vSxe/xd4BxGuxxDgeAhCAAAQgUIMEZsyQjjlGsn/2WemKK6SbbqrBjrSukEsWrwkmi9h58 alfkzEqmdcPRM6YMAAtWvXTk8//bRuvfXW/2vv/kOrqv84jr Jfg1xqWmgRTGGxNZ/JvQFLQkNJDZB1D8UtT9C9kdNIymDhBIMVBwhg4EZ/bAlhP3Rj/3ngkAFCRsEuZEwpBUTcYgMU/sBfnl/xudydnZ 3XPOved87n0eENl2fnzO4/05n/u6Z597Jlu3bpX/6XwS3 INp/ojDahnz541d1DHxsYqwVbDqr0LqyF48 bN0tfXJ9evX6 EVW8Q1vXTLITXNGpsgwACCCCAgGMCly LdHWJ6P/6wS39ra/ z1JqgVzCq//O68jIiAwPD0tvb6/8/fffcuzYMXnkkUdk3rx5lakFVsUfRvX7GkD1Tu2OHTtMMLZB1k4F8N5d9QdfbYvedV27dq0Jt2kWwmsaNbZBAAEEEEDAMYHJSZ33KKL/f/utyCefzPzPUmqBXMLruXPnpL29vRJM9W7s6OioCa/6K357Z1Yl7LxYqxIUNr3hVaccTExMzJrHasOrTjPwTzEgvJa6v9E4BBBAAAEEyiMwPS3yxBMi v pUyJDQzP/s5RaIDS86oeu vv7ZXx8fNYJ9PT0VOa16joaHltaWky4tIu989rd3S2ff/656DZ6JzYovHLntdT9g8YhgAACCCDQ2AIPPCDy778iH30kcvHizP8spRbIdOdVP5Q1PT0tra2ts 6o2jmvixcvlgcffFC2b99ugvC6desqwderwpzXUvcRGocAAggggEDjCsyfPzNt4OOPRSYmRD78sHHPtUHOLHV4tVMDli9fLlNTU3OmAwwMDMhvv/0mr7zyiqE6ffq07Nu3z3yAy7/wtIEG6U2cBgIIIIAAAq4JPP64yE8/zTzvVe/Avvmma2fQdO1NHV71rutFvb3uWXSagD4aSxd9wsDg4KD8999/ZlqBPnmgra3N/Mw 09X7vFae89p0fY8TRgABBBBAoHiBjo6Z4Kof1nrsMZG33iq TbQgUiB1eM3iqvNcDx48KJs2bZr1xway7DPPbXnaQJ6a7AsBBBBAAIESC2zcKPLuu/qAehF9Vn1PT4kbS9NUoJDwqndZ9a5tlj8kUMvyEV5rqcu EUAAAQQQKJHA vUib7wx88cJNmwQ2bq1RI2jKUEChYTXspdCw2vShT8jm1SK9RBAAAEEECihwLZtM3 oYHBQ5PXXRV5 uYSNpEleAcJrQH/gzisXCQIIIIAAAk0i8NprIp2d heSRHbvFgn4S6BNIuHMaRJeCa/OdFYaigACCCCAQO4CfX0i998vMjAg8t13Ik8/nfsh2GG AoRXwmu PYq9IYAAAggg4JKAhtZffxX56iuRy5dFHn3UpdY3ZVsJr4TXpuz4nDQCCCCAAAJG4JtvRD77TOTnn0X AMUBwQIr4RXB7opTUQAAQQQQKBGAvrM sOHRS5cILzWiDjv3RJeCa959yn2hwACCCCAgDsCt26JLFki8txzIj/ 6E67m7ilhFfCaxN3f04dAQQQQAABEXnxRZEXXhA5cAAOBwQIr4RXB7opTUQAAQQQQAABBGYECK EV64FBBBAAAEEEEDAGQHCK HVmc5KQxFAAAEEEEAAAcIr4ZWrAAEEEEAAAQQQcEaA8Ep4daaz0lAEEEAAAQQQQIDwSnjlKkAAAQQQQAABBJwRILwSXp3prDQUAQQQQAABBBAgvBJeuQoQQAABBBBAAAFnBAivhFdnOisNRQABBBBAAAEECK EV64CBBBAAAEEEEDAGQHCK HVmc5KQxFAAAEEEEAAAcIr4ZWrAAEEEEAAAQQQcEaA8Ep4daaz0lAEEEAAAQQQQIDwSnjlKkAAAQQQQAABBJwRILwSXp3prDQUAQQQQAABBBAgvBJeuQoQQAABBBBAAAFnBAivhFdnOisNRQABBBBAAAEECK EV64CBBBAAAEEEEDAGQHCK HVmc5KQxFAAAEEEEAAAcIr4ZWrAAEEEEAAAQQQcEaA8Ep4daaz0lAEEEAAAQQQQIDwSnjlKkAAAQQQQAABBJwRILwSXp3prDQUAQQQQAABBBAgvBJeuQoQQAABBBBAAAFnBAivhFdnOisNRQABBBBAAAEECK EV64CBBBAAAEEEEDAGQHCK HVmc5KQxFAAAEEEEAAAcIr4ZWrAAEEEEAAAQQQcEaA8Ep4daaz0lAEEEAAAQQQQIDwSnjlKkAAAQQQQAABBJwRILwSXp3prDQUAQQQQAABBBAgvBJeuQoQQAABBBBAAAFnBAivhFdnOisNRQABBBBAAAEECK EV64CBBBAAAEEEEDAGQHCK HVmc5KQxFAAAEEEEAAAcIr4ZWrAAEEEEAAAQQQcEaA8Ep4daaz0lAEEEAAAQQQQIDwSnjlKkAAAQQQQAABBJwRILwSXp3prDQUAQQQQAABBBAgvBJeuQoQQAABBBBAAAFnBAivhFdnOisNRQABBBBAAAEECK EV64CBBBAAAEEEEDAGYHU4fXOnTuyf/9 uXXrljnZlStXyq5duyonfuLECbl48WLl6/vuu092794tHR0dgThff/21nDlzxvxs4cKFcujQocp6N27ckAMHDsjdu3fN93bu3CmrVq2q/Pz8 fNy8uRJ8/XDDz8s7733nixatCh1EX4em5JnOxan3p4NEUAAAQQQQAABBGojkDq8Dg0NybJly2RyclJ //13 fPPP2XLli2yYsUK09J33nnHBMi33347tuUaPk dOmXWnT9/vgmqTz75pOzdu7eyryVLlpivNeT 8MMPZv9PPfWUOfaRI0dk27ZtJtDq93Xxht/YBvhWILxWK1b9 hhXb5b3FtQgb9F0 6MO6dzy3Ioa5KmZbl/UIJ1bnlu5VIPU4dWCaYi9evWq XLp0qXS1dUlN2/elPfff1/Wr19v/sUtGjhtONV1NaCePXvW3EEdGxurBFsNq/Yu7PPPPy bN2 Wvr4 uX79eiWseoOwrp9mcamAac6vDNtgXHwVqEHxNdAWUIfi60ANqEHxAsW3wKXrIJfw6r/zOjIyIp9 qn8888/phr37t2TDRs2mGDrX/xhVH uAfSLL76QHTt2mGBsg6ydCuC9u oPvtoWveu6du1aE27TLC4VMM35lWEbjIuvAjUovgaEV2pQDoHiW8F4RA2qEcglvJ47d07a29src141vB4/fly6u7tl9erV8sEHH8jt27fl1VdfrUwrsI0MCpve8HrhwgWZmJiYNY/VhledZuCfYkB4rab8xa3LQFWcvT0yNSi BoRXalAOgeJbwXhEDaoRCA2v oGs/v5 GR8fn7W/np6eSgDVdTQ8trS0mHBpFw2vw8PD0tvba36mX3/55ZcmyG7cuHHW/rjzWk25GmddBqria0kNiq8B4ZUalEOg FYwHlGDagQy3XnVJwpMT09La2vrrCcNXLlyxXz6f8 ePbJgwQITXnUawZo1awJ/lc c12pK1hjrMlAVX0dqUHwNCK/UoBwCxbeC8YgaVCOQOrzqB7VGR0dl fLlMjU1NSu82ru2nZ2dZu7p0aNH5dq1a ZpAW1tbXPax9MGqilZY6zLQFV8HalB8TUgvFKDcggU3wrGI2pQjUDq8Op/jqseVOe42g9lDQwMyC //FJpi3e6gX2mq/d5rTzntZqyub8uA1XxNaQGxdeA8EoNyiFQfCsYj6hBNQKpw2s1B/Gvq/NcDx48KJs2bZr1xway7DPPbbmI8tQM3hfGtTeOOwI1iBOqz8 pQ32co45CDahB8QLFt8Cl66CQ8Kp3WfWvb2X5QwK1LLNLBaylQy33jXEtdZPtmxokc6r1WtSh1sLx 6cG8Ua1XoMa1Fo4fv8u1aCQ8BpPWPwaWkQWBBBAwDWB1nkPyPRf/7rWbNqLAAIIyLMdixMpEF4TMbESAggggAACCCCAQBkECK9lqAJtQAABBBBAAAEEEEgkQHhNxMRKCCCAAAIIIIAAAmUQILyWoQq0AQEEEEAAAQQQQCCRAOE1ERMrIYAAAggggAACCJRBgPBahirQBgQQQAABBBBAAIFEAoTXREyshAACCCCAAAIIIFAGAcJrGapAGxBAAAEEEEAAAQQSCRBeEzGxEgIIIIAAAggggEAZBAivZaiC4224efOmHD58WG7cuGHOpKenR1asWFE5qzt37kh/f7 Mj49LS0uL7NmzR9ra2szPvT9buXKl7Nq1a47G0NCQfP/995Xv /fvOF9uzT9x4oT5s8u6 C2jaqDr223b29ult7fX1Mku3v3a7wWtl9uJOLyjqBp4nYOuk6ga LfFP7yTeMeLuP7sH0tGRkbk PHjc8YpezTvvsPGK4e7b25Nj6uBdQ4aq65cuSLHjh0zrw3 1wtdP2rb3E6gAXaUxTHuNT1urKoHH G1HsoNfAwdYAYHB2XLli2yYMECM7CcPn1a9u3bZ762L7pLly6Vrq6uwJ/rOjrYXb16dU541e Pjo7OCVQNTJrq1NRp2bJl5k2DHXi0JvZNhA42cTXQ2g0PD8dae/eVqrENulFcDbx9XF9YNCRpeLJv5OwLc1AN/LWhBsGdSJ0mJyfNWGPfsHV2dpqv/eNMWA30 tHwtHPnzjm18Y5t1CBdDdT95MmT5ibGQw89ZG5s2BqpvRpv377dBFf/ B 1bYMOK6lOK4tjktf0qLEqVYNTbER4TYHGJuEC/oHfO9homLUvKOvWrZt1dzYovIati3 8gPeFNWkNkoRX/77iW9K8a3hrEBSIgsJPWA3814d rYsNZc2rHH3mXrekNQgLr/56cS0k63X vut3jBp3/MbVbJusdc2xVhbHqDdzSW521EqY8For2Sbdr//Oa9DApAOQLt4pAkHh1d4Z0V/PnTlzxmzDr riO5b/zmvSGsSFV95MxNvbNfw1CAo6Qb9VCKuB3d/ChQtl9erVcunSpcApNslb2Phr u 8Jq1BNeE16O5548smP0N/DYLGkLA74HoU7zWiX tdWu Nj6htk7ey8dfM4hj021QVi3u9qLUq4bXWwk20/6BfVwe9QFcTXvXXd88884x5obb7X7VqFXecIvqV3zdpDeIGo7ifN1FXjz1Vfw2CXgCqCa/eOct68O7ubq6BmCr4fZPWICy86v7Onz9fmRKlNdY3Ed45/LEdo8lW8Ncg6DUiLID6v1/Ntk3GHHm6WRyDzO3Bin49ILzSy3MRqGYOXzXh1c6NsvNnw bG5nISju8kaI5f2DvkoBpEDUZRg5jjbLk2P6wGSe/6hdXAPwVBPyDJm7jw0gX176Q1CAuvejTvB/JeeumlSni141OuncnxnQXVIOmd16A3Gkm3dZwt1 ZncYy7q014zbVU7KwIgajBPul8y6BQGrRfwmv0C7b9UJZ3raQ1iBqM OBcsisr7EM8SedbBtUg6I1D0S8cyTSKWStsjEhag6jxzHtG1CC8vlHjdNy81ai5xHHbFtPjynnULI5JroGi z93XsvZ75xpVdidJu8JJPmke9hg5333zt2/6BeLqKcyJKlB2GCUpMbOdNgaNjQu4Kd92oD11/mudp540F2tGp6aM7sOm59nTyBJDZK8cDMWhXeJuBrEPW1Af6vgfVJK2Btx/5MKnOmkdWhoXP MqkHS8Z7wWodCcojaCdiLxD7jVY8U9SzXoOf26TZh4ZW5fslqF/QsVu 8yLjnvOpRwgajuF8fJWth468VVwMV8K4T9LziuA9s2euM57wG9ycdR7zPhNa1/B/yjKtB1Ker9QNaduF50 lroP3cWnrr4302qd37okWLZj16MWzbxh9hkp9hFsckr lRrxfJW5ltTe68ZvNjawQQQAABBBBAAIE6ChBe64jNoRBAAAEEEEAAAQSyCRBes/mxNQIIIIAAAggggEAdBQivdcTmUAgggAACCCCAAALZBAiv2fzYGgEEEEAAAQQQQKCOAoTXOmJzKAQQQAABBBBAAIFsAoTXbH5sjQACCCCAAAIIIFBHAcJrHbE5FAIIIIAAAggggEA2AcJrNj 2RgABBBBAAAEEEKijAOG1jtgcCgEEEEAAAQQQQCCbAOE1mx9bI4AAAggggAACCNRRgPBaR2wOhQACCCCAAAIIIJBNgPCazY tEUAAAQQQQAABBOooQHitIzaHQgABBBBAAAEEEMgmQHjN5sfWCCCAAAIIIIAAAnUUILzWEZtDIYAAAggggAACCGQTILxm82NrBBBAAAEEEEAAgToKEF7riM2hEEAAAQQQQAABBLIJ/B/MRo982v YYAAAAABJRU5ErkJggg==`
  641. // image := `data:image/jpeg;base64,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`
  642. // b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, image)
  643. // if !b {
  644. // fmt.Println("regexp.MatchString")
  645. // return
  646. // }
  647. // ext := ".png"
  648. // uploadDir := "./static"
  649. // randStr := utils.GetRandStringNoSpecialChar(28)
  650. // fileName := randStr + ext
  651. // fpath := uploadDir + "/" + fileName
  652. //
  653. // re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
  654. // base64Str := re.ReplaceAllString(image, "")
  655. // base64Str = strings.Replace(base64Str, " ", "", -1)
  656. //
  657. // err = utils.SaveBase64ToFile(base64Str, fpath)
  658. // if err != nil {
  659. // return
  660. // }
  661. // fmt.Println("end")
  662. //
  663. // defer os.Remove(fpath)
  664. //
  665. // hzUploadDir := "static/images/"
  666. // savePath := hzUploadDir + time.Now().Format("200601/20060102/")
  667. // savePath += fileName
  668. // //上传到阿里云
  669. // err = services.UploadFileToAliyun(fileName, fpath, savePath)
  670. // if err != nil {
  671. // return
  672. // }
  673. // fileHost := "https://hzstatic.hzinsights.com/"
  674. //
  675. // resourceUrl := fileHost + savePath
  676. // fmt.Println("resourceUrl:", resourceUrl)
  677. // utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  678. // utils.FileLog.Info("end update oss ")
  679. // fmt.Println("end")
  680. //}
  681. // 判断文件是否存在
  682. func IsFileExist(filename string) bool {
  683. _, err := os.Stat(filename)
  684. if os.IsNotExist(err) {
  685. return false
  686. }
  687. return true
  688. }
  689. // @Title 图片上传
  690. // @Description 图片上传接口
  691. // @Param file query file true "文件"
  692. // @Success 200 新增成功
  693. // @router /image/uploadV2 [post]
  694. func (this *ResourceController) UploadV2() {
  695. br := new(models.BaseResponse).Init()
  696. defer func() {
  697. this.Data["json"] = br
  698. this.ServeJSON()
  699. }()
  700. businessType := this.Ctx.Request.Form.Get("business_type")
  701. //this.Ctx.Request
  702. fmt.Println("businessType:", businessType)
  703. fmt.Println(this.Ctx.Request.Form)
  704. fmt.Println("===========")
  705. br.Data = businessType
  706. f, h, err := this.GetFile("file")
  707. if err != nil {
  708. br.Msg = "获取资源信息失败"
  709. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  710. return
  711. }
  712. ext := path.Ext(h.Filename)
  713. dateDir := time.Now().Format("20060102")
  714. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  715. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  716. if err != nil {
  717. br.Msg = "存储目录创建失败"
  718. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  719. return
  720. }
  721. randStr := utils.GetRandStringNoSpecialChar(28)
  722. fileName := randStr + ext
  723. fpath := uploadDir + "/" + fileName
  724. defer f.Close() //关闭上传文件
  725. err = this.SaveToFile("file", fpath)
  726. if err != nil {
  727. br.Msg = "文件上传失败"
  728. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  729. return
  730. }
  731. resourceUrl := ``
  732. //上传到阿里云 和 minio
  733. //if utils.ObjectStorageClient == "minio" {
  734. // resourceUrl, err = services.UploadImgToMinIo(fileName, fpath)
  735. // if err != nil {
  736. // br.Msg = "文件上传失败"
  737. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  738. // return
  739. // }
  740. //} else {
  741. // resourceUrl, err = services.UploadAliyunV2(fileName, fpath)
  742. // if err != nil {
  743. // br.Msg = "文件上传失败"
  744. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  745. // return
  746. // }
  747. //}
  748. ossClient := services.NewOssClient()
  749. if ossClient == nil {
  750. br.Msg = "上传失败"
  751. br.ErrMsg = "初始化OSS服务失败"
  752. return
  753. }
  754. resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
  755. if err != nil {
  756. br.Msg = "文件上传失败"
  757. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  758. return
  759. }
  760. defer func() {
  761. os.Remove(fpath)
  762. }()
  763. item := new(models.Resource)
  764. item.ResourceUrl = resourceUrl
  765. item.ResourceType = 1
  766. item.CreateTime = time.Now()
  767. newId, err := models.AddResource(item)
  768. if err != nil {
  769. br.Msg = "资源上传失败"
  770. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  771. return
  772. }
  773. resp := new(models.ResourceResp)
  774. resp.Id = newId
  775. resp.ResourceUrl = resourceUrl
  776. br.Msg = "上传成功"
  777. br.Ret = 200
  778. br.Success = true
  779. //br.Data = resp
  780. return
  781. }
  782. // @Title 获取STSToken
  783. // @Description 获取STSToken
  784. // @Success 200 获取成功
  785. // @router /oss/get_sts_token [get]
  786. func (this *ResourceController) OssSTSToken() {
  787. br := new(models.BaseResponse).Init()
  788. defer func() {
  789. this.Data["json"] = br
  790. this.ServeJSON()
  791. }()
  792. ossClient := services.NewOssClient()
  793. if ossClient == nil {
  794. br.Msg = "上传失败"
  795. br.ErrMsg = "初始化OSS服务失败"
  796. return
  797. }
  798. resp, e := ossClient.GetUploadToken()
  799. if e != nil {
  800. br.Msg = "获取失败"
  801. br.ErrMsg = "获取OSS上传Token失败, Err: " + e.Error()
  802. return
  803. }
  804. br.Data = resp
  805. br.Msg = "获取成功"
  806. br.Ret = 200
  807. br.Success = true
  808. //source, _ := this.GetInt("StorageSource")
  809. //
  810. //if source == utils.STORAGESOURCE_OSS {
  811. // resp, err := services.GetOssSTSToken()
  812. // if err != nil {
  813. // br.Msg = "获取失败"
  814. // br.ErrMsg = "获取STSToken失败, Err: " + err.Error()
  815. // return
  816. // }
  817. // br.Data = resp
  818. // br.Msg = "获取成功"
  819. // br.Ret = 200
  820. // br.Success = true
  821. //} else if source == utils.STORAGESOURCE_MINIO {
  822. // resp, err := services.GetMinIOSTSToken()
  823. // if err != nil {
  824. // br.Msg = "获取失败"
  825. // br.ErrMsg = "获取STSToken失败, Err: " + err.Error()
  826. // return
  827. // }
  828. // br.Data = resp
  829. // br.Msg = "获取成功"
  830. // br.Ret = 200
  831. // br.Success = true
  832. //}
  833. }
  834. // WechatWarning 小程序前端预警提示
  835. // @Description 小程序前端预警提示
  836. // @Param content query string true "预警信息"
  837. // @Success 200 {string} string "操作成功"
  838. // @router /public/wechat_warning [post]
  839. func (this *ResourceController) WechatWarning() {
  840. br := new(models.BaseResponse).Init()
  841. defer func() {
  842. this.Data["json"] = br
  843. this.ServeJSON()
  844. }()
  845. var req alarm_msg.WechatWarningReq
  846. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  847. if err != nil {
  848. br.Msg = "参数解析异常!"
  849. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  850. return
  851. }
  852. if req.Content != "" {
  853. tips := fmt.Sprintf("研报小程序前端报错预警-ErrMsg: %s", req.Content)
  854. utils.FileLog.Info(tips)
  855. go alarm_msg.SendAlarmMsg(tips, 2)
  856. }
  857. br.Msg = "发送成功"
  858. br.Ret = 200
  859. br.Success = true
  860. }