resource.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761
  1. package controllers
  2. import (
  3. "bufio"
  4. "encoding/base64"
  5. "eta_gn/eta_api/models"
  6. "eta_gn/eta_api/services"
  7. "eta_gn/eta_api/utils"
  8. "fmt"
  9. "github.com/h2non/filetype"
  10. "github.com/kgiannakakis/mp3duration/src/mp3duration"
  11. "io"
  12. "io/ioutil"
  13. "net/http"
  14. "os"
  15. "path"
  16. "regexp"
  17. "strconv"
  18. "strings"
  19. "time"
  20. rdHttp "github.com/rdlucklib/rdluck_tools/http"
  21. )
  22. type ResourceController struct {
  23. BaseCommonController
  24. }
  25. type ResourceAuthController struct {
  26. BaseAuthController
  27. }
  28. // @router /image/upload [post]
  29. func (this *ResourceController) Upload() {
  30. br := new(models.BaseResponse).Init()
  31. defer func() {
  32. this.Data["json"] = br
  33. this.ServeJSON()
  34. }()
  35. f, h, err := this.GetFile("file")
  36. if err != nil {
  37. br.Msg = "获取资源信息失败"
  38. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  39. return
  40. }
  41. fileData, e := ioutil.ReadAll(f)
  42. if e != nil {
  43. br.Msg = "上传失败"
  44. br.ErrMsg = "读取文件失败, Err: " + e.Error()
  45. return
  46. }
  47. pass := filetype.IsImage(fileData)
  48. if !pass {
  49. br.Msg = "文件格式有误"
  50. br.ErrMsg = "文件格式有误"
  51. return
  52. }
  53. uploadFileName := h.Filename //上传的文件名
  54. ext := path.Ext(h.Filename)
  55. dateDir := time.Now().Format("20060102")
  56. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  57. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  58. if err != nil {
  59. br.Msg = "存储目录创建失败"
  60. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  61. return
  62. }
  63. randStr := utils.GetRandStringNoSpecialChar(28)
  64. fileName := randStr + ext
  65. fpath := uploadDir + "/" + fileName
  66. defer f.Close() //关闭上传文件
  67. err = this.SaveToFile("file", fpath)
  68. if err != nil {
  69. br.Msg = "文件上传失败"
  70. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  71. return
  72. }
  73. resourceUrl := ``
  74. ossClient := services.NewOssClient()
  75. if ossClient == nil {
  76. br.Msg = "上传失败"
  77. br.ErrMsg = "初始化OSS服务失败"
  78. return
  79. }
  80. resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
  81. if err != nil {
  82. br.Msg = "文件上传失败"
  83. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  84. return
  85. }
  86. defer func() {
  87. os.Remove(fpath)
  88. }()
  89. item := new(models.Resource)
  90. item.ResourceUrl = resourceUrl
  91. item.ResourceType = 1
  92. item.CreateTime = time.Now()
  93. newId, err := models.AddResource(item)
  94. if err != nil {
  95. br.Msg = "资源上传失败"
  96. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  97. return
  98. }
  99. resp := models.ResourceResp{
  100. Id: newId,
  101. ResourceUrl: resourceUrl,
  102. ResourceName: uploadFileName,
  103. }
  104. br.Msg = "上传成功"
  105. br.Ret = 200
  106. br.Success = true
  107. br.Data = resp
  108. return
  109. }
  110. // @router /video/upload [post]
  111. func (this *ResourceController) VideoUpload() {
  112. utils.FileLog.Info("start VideoUpload ")
  113. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  114. br := new(models.BaseResponse).Init()
  115. defer func() {
  116. this.Data["json"] = br
  117. this.ServeJSON()
  118. }()
  119. f, h, err := this.GetFile("file")
  120. if err != nil {
  121. br.Msg = "获取资源信息失败"
  122. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  123. return
  124. }
  125. fileData, e := ioutil.ReadAll(f)
  126. if e != nil {
  127. br.Msg = "上传失败"
  128. br.ErrMsg = "读取文件失败, Err: " + e.Error()
  129. return
  130. }
  131. pass := filetype.IsVideo(fileData)
  132. if !pass {
  133. br.Msg = "文件格式有误"
  134. br.ErrMsg = "文件格式有误"
  135. return
  136. }
  137. ext := path.Ext(h.Filename)
  138. dateDir := time.Now().Format("20060102")
  139. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  140. fmt.Println(uploadDir)
  141. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  142. if err != nil {
  143. br.Msg = "存储目录创建失败"
  144. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  145. return
  146. }
  147. randStr := utils.GetRandStringNoSpecialChar(28)
  148. fileName := randStr + ext
  149. fpath := uploadDir + "/" + fileName
  150. defer f.Close() //关闭上传文件
  151. utils.FileLog.Info("start save")
  152. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  153. utils.FileLog.Info("fpath %s:", fpath)
  154. fileHandle, err := os.OpenFile(fpath, os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModeAppend)
  155. if err != nil {
  156. br.Msg = "创建文件失败"
  157. br.ErrMsg = "创建文件失败,Err:" + err.Error()
  158. return
  159. }
  160. defer fileHandle.Close()
  161. for {
  162. buffer := make([]byte, 4096)
  163. _, err := f.Read(buffer)
  164. if err != nil && err != io.EOF {
  165. br.Msg = "上传失败"
  166. br.ErrMsg = "读取文件内容失败,Err:" + err.Error()
  167. return
  168. }
  169. if err == io.EOF {
  170. break
  171. }
  172. buf := bufio.NewWriter(fileHandle)
  173. buf.WriteString(string(buffer))
  174. err = buf.Flush()
  175. if err != nil {
  176. br.Msg = "上传失败"
  177. br.ErrMsg = "写入文件内容失败,Err:" + err.Error()
  178. return
  179. }
  180. }
  181. defer func() {
  182. _ = os.Remove(fpath)
  183. }()
  184. resourceUrl := ``
  185. ossClient := services.NewOssClient()
  186. if ossClient == nil {
  187. br.Msg = "上传失败"
  188. br.ErrMsg = "初始化OSS服务失败"
  189. return
  190. }
  191. resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
  192. if err != nil {
  193. br.Msg = "文件上传失败"
  194. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  195. return
  196. }
  197. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  198. utils.FileLog.Info("end update oss ")
  199. item := new(models.Resource)
  200. item.ResourceUrl = resourceUrl
  201. item.ResourceType = 3
  202. item.CreateTime = time.Now()
  203. newId, err := models.AddResource(item)
  204. if err != nil {
  205. br.Msg = "资源上传失败"
  206. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  207. return
  208. }
  209. resp := new(models.ResourceResp)
  210. resp.Id = newId
  211. resp.ResourceUrl = resourceUrl
  212. utils.FileLog.Info("start GetMP4Duration ")
  213. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  214. duration, err := services.GetMP4Duration(f)
  215. if err != nil {
  216. panic(err)
  217. }
  218. utils.FileLog.Info("end GetMP4Duration ")
  219. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  220. resp.PlaySeconds = duration
  221. br.Msg = "上传成功"
  222. br.Ret = 200
  223. br.Success = true
  224. br.Data = resp
  225. utils.FileLog.Info("end VideoUpload ")
  226. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  227. return
  228. }
  229. // @router /voice/upload [post]
  230. func (this *ResourceController) VoiceUpload() {
  231. utils.FileLog.Info("start VoiceUpload ")
  232. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  233. br := new(models.BaseResponse).Init()
  234. defer func() {
  235. this.Data["json"] = br
  236. this.ServeJSON()
  237. }()
  238. f, h, err := this.GetFile("file")
  239. if err != nil {
  240. br.Msg = "获取资源信息失败"
  241. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  242. return
  243. }
  244. uploadFileName := h.Filename //上传的文件名
  245. fileData, e := ioutil.ReadAll(f)
  246. if e != nil {
  247. br.Msg = "上传失败"
  248. br.ErrMsg = "读取文件失败, Err: " + e.Error()
  249. return
  250. }
  251. pass := filetype.IsAudio(fileData)
  252. if !pass {
  253. br.Msg = "文件格式有误"
  254. br.ErrMsg = "文件格式有误"
  255. return
  256. }
  257. ext := path.Ext(h.Filename)
  258. dateDir := time.Now().Format("20060102")
  259. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  260. fmt.Println(uploadDir)
  261. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  262. if err != nil {
  263. br.Msg = "存储目录创建失败"
  264. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  265. return
  266. }
  267. randStr := utils.GetRandStringNoSpecialChar(28)
  268. fileName := randStr + ext
  269. fpath := uploadDir + "/" + fileName
  270. defer f.Close() //关闭上传文件
  271. utils.FileLog.Info("start save")
  272. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  273. utils.FileLog.Info(fmt.Sprintf("fpath %s:", fpath))
  274. fileHandle, err := os.OpenFile(fpath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755)
  275. if err != nil {
  276. br.Msg = "创建文件失败"
  277. br.ErrMsg = "创建文件失败,Err:" + err.Error()
  278. return
  279. }
  280. defer fileHandle.Close()
  281. localFileBuffer := make([]byte, 0)
  282. for {
  283. buffer := make([]byte, 4096)
  284. maxLen, err := f.Read(buffer)
  285. if err != nil && err != io.EOF {
  286. br.Msg = "上传失败"
  287. br.ErrMsg = "读取文件内容失败,Err:" + err.Error()
  288. return
  289. }
  290. if err == io.EOF {
  291. break
  292. }
  293. buf := bufio.NewWriter(fileHandle)
  294. buf.WriteString(string(buffer))
  295. localFileBuffer = append(localFileBuffer, buffer[0:maxLen]...)
  296. err = buf.Flush()
  297. if err != nil {
  298. br.Msg = "上传失败"
  299. br.ErrMsg = "写入文件内容失败,Err:" + err.Error()
  300. return
  301. }
  302. }
  303. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  304. utils.FileLog.Info("end save")
  305. defer func() {
  306. if utils.FileIsExist(fpath) {
  307. os.Remove(fpath)
  308. }
  309. }()
  310. var playSeconds float64
  311. if ext == ".m4a" { //m4a格式的走这个计算逻辑
  312. utils.FileLog.Info("start calculate m4a duration ")
  313. tmpPlaySeconds, err := services.GetMP4Duration(f)
  314. if err != nil {
  315. br.Msg = "音频资源时长计算失败"
  316. br.ErrMsg = "音频资源时长计算失败,Err:" + err.Error()
  317. return
  318. }
  319. playSeconds = float64(tmpPlaySeconds)
  320. utils.FileLog.Info("end calculate m4a duration ")
  321. } else {
  322. utils.FileLog.Info("start calculate mp3duration ")
  323. playSeconds, err = mp3duration.Calculate(fpath)
  324. if playSeconds <= 0 {
  325. playSeconds, err = utils.GetVideoPlaySeconds(fpath)
  326. if err != nil {
  327. br.Msg = "音频资源时长计算失败"
  328. br.ErrMsg = "音频资源时长计算失败,Err:" + err.Error()
  329. return
  330. }
  331. }
  332. utils.FileLog.Info("end calculate mp3duration ")
  333. }
  334. utils.FileLog.Info("start update oss ")
  335. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  336. defer func() {
  337. _ = os.Remove(fpath)
  338. }()
  339. resourceUrl := ``
  340. ossClient := services.NewOssClient()
  341. if ossClient == nil {
  342. br.Msg = "上传失败"
  343. br.ErrMsg = "初始化OSS服务失败"
  344. return
  345. }
  346. resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
  347. if err != nil {
  348. br.Msg = "文件上传失败"
  349. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  350. return
  351. }
  352. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  353. utils.FileLog.Info("end update oss ")
  354. item := new(models.Resource)
  355. item.ResourceUrl = resourceUrl
  356. item.ResourceType = 3
  357. item.CreateTime = time.Now()
  358. newId, err := models.AddResource(item)
  359. if err != nil {
  360. br.Msg = "音频资源上传失败"
  361. br.ErrMsg = "音频资源上传失败,Err:" + err.Error()
  362. return
  363. }
  364. resp := models.ResourceResp{
  365. Id: newId,
  366. ResourceUrl: resourceUrl,
  367. ResourceName: uploadFileName,
  368. PlaySeconds: uint32(playSeconds),
  369. }
  370. br.Msg = "上传成功"
  371. br.Ret = 200
  372. br.Success = true
  373. br.Data = resp
  374. utils.FileLog.Info("end VoiceUpload ")
  375. utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
  376. return
  377. }
  378. // @router /upload_image_base64 [post]
  379. func (this *ResourceController) UploadImageBase64() {
  380. br := new(models.BaseResponse).Init()
  381. defer func() {
  382. this.Data["json"] = br
  383. this.ServeJSON()
  384. }()
  385. var err error
  386. ext := ".png"
  387. uploadDir := "./static"
  388. randStr := utils.GetRandStringNoSpecialChar(28)
  389. fileName := randStr + ext
  390. fpath := uploadDir + "/" + fileName
  391. image := this.Ctx.Request.FormValue("Image")
  392. if image == "" {
  393. f, h, e := this.GetFile("Image")
  394. if e != nil {
  395. br.Msg = "参数错误"
  396. br.ErrMsg = "获取资源信息失败,Err:" + e.Error()
  397. return
  398. }
  399. fileData, e := ioutil.ReadAll(f)
  400. if e != nil {
  401. br.Msg = "上传失败"
  402. br.ErrMsg = "读取文件失败, Err: " + e.Error()
  403. return
  404. }
  405. pass := filetype.IsImage(fileData)
  406. if !pass {
  407. br.Msg = "文件格式有误"
  408. br.ErrMsg = "文件格式有误"
  409. return
  410. }
  411. ext = path.Ext(h.Filename)
  412. dateDir := time.Now().Format("20060102")
  413. uploadDir = utils.STATIC_DIR + "hongze/" + dateDir
  414. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  415. if err != nil {
  416. br.Msg = "存储目录创建失败"
  417. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  418. return
  419. }
  420. randStr = utils.GetRandStringNoSpecialChar(28)
  421. fileName = randStr + ext
  422. fpath = uploadDir + "/" + fileName
  423. defer f.Close() //关闭上传文件
  424. err = this.SaveToFile("Image", fpath)
  425. if err != nil {
  426. br.Msg = "文件上传失败"
  427. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  428. return
  429. }
  430. } else {
  431. b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, image)
  432. if !b {
  433. br.Msg = "图片格式不正确"
  434. br.ErrMsg = "图片格式不正确"
  435. return
  436. }
  437. re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
  438. base64Str := re.ReplaceAllString(image, "")
  439. base64Str = strings.Replace(base64Str, " ", "", -1)
  440. err = utils.SaveBase64ToFile(base64Str, fpath)
  441. if err != nil {
  442. br.Msg = "图片保存失败"
  443. br.ErrMsg = "图片保存失败,Err:" + err.Error()
  444. return
  445. }
  446. }
  447. fmt.Println("end")
  448. defer os.Remove(fpath)
  449. hzUploadDir := utils.RESOURCE_DIR + "images/"
  450. savePath := hzUploadDir + time.Now().Format("200601/20060102/")
  451. savePath += fileName
  452. resourceUrl := ``
  453. ossClient := services.NewOssClient()
  454. if ossClient == nil {
  455. br.Msg = "上传失败"
  456. br.ErrMsg = "初始化OSS服务失败"
  457. return
  458. }
  459. resourceUrl, err = ossClient.UploadFile(fileName, fpath, savePath)
  460. if err != nil {
  461. br.Msg = "文件上传失败"
  462. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  463. return
  464. }
  465. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  466. utils.FileLog.Info("end update oss ")
  467. item := new(models.Resource)
  468. item.ResourceUrl = resourceUrl
  469. item.ResourceType = 1
  470. item.CreateTime = time.Now()
  471. newId, err := models.AddResource(item)
  472. if err != nil {
  473. br.Msg = "资源上传失败"
  474. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  475. return
  476. }
  477. resp := new(models.ResourceResp)
  478. resp.Id = newId
  479. resp.ResourceUrl = resourceUrl
  480. br.Msg = "上传成功"
  481. br.Ret = 200
  482. br.Success = true
  483. br.Data = resp
  484. utils.FileLog.Info("end VideoUpload ")
  485. utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
  486. }
  487. func IsFileExist(filename string) bool {
  488. _, err := os.Stat(filename)
  489. if os.IsNotExist(err) {
  490. return false
  491. }
  492. return true
  493. }
  494. // @router /image/uploadV2 [post]
  495. func (this *ResourceController) UploadV2() {
  496. br := new(models.BaseResponse).Init()
  497. defer func() {
  498. this.Data["json"] = br
  499. this.ServeJSON()
  500. }()
  501. businessType := this.Ctx.Request.Form.Get("business_type")
  502. fmt.Println("businessType:", businessType)
  503. fmt.Println(this.Ctx.Request.Form)
  504. fmt.Println("===========")
  505. br.Data = businessType
  506. f, h, err := this.GetFile("file")
  507. if err != nil {
  508. br.Msg = "获取资源信息失败"
  509. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  510. return
  511. }
  512. fileData, e := ioutil.ReadAll(f)
  513. if e != nil {
  514. br.Msg = "上传失败"
  515. br.ErrMsg = "读取文件失败, Err: " + e.Error()
  516. return
  517. }
  518. pass := filetype.IsImage(fileData)
  519. if !pass {
  520. br.Msg = "文件格式有误"
  521. br.ErrMsg = "文件格式有误"
  522. return
  523. }
  524. ext := path.Ext(h.Filename)
  525. dateDir := time.Now().Format("20060102")
  526. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  527. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  528. if err != nil {
  529. br.Msg = "存储目录创建失败"
  530. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  531. return
  532. }
  533. randStr := utils.GetRandStringNoSpecialChar(28)
  534. fileName := randStr + ext
  535. fpath := uploadDir + "/" + fileName
  536. defer f.Close() //关闭上传文件
  537. err = this.SaveToFile("file", fpath)
  538. if err != nil {
  539. br.Msg = "文件上传失败"
  540. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  541. return
  542. }
  543. resourceUrl := ``
  544. ossClient := services.NewOssClient()
  545. if ossClient == nil {
  546. br.Msg = "上传失败"
  547. br.ErrMsg = "初始化OSS服务失败"
  548. return
  549. }
  550. resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
  551. if err != nil {
  552. br.Msg = "文件上传失败"
  553. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  554. return
  555. }
  556. defer func() {
  557. os.Remove(fpath)
  558. }()
  559. item := new(models.Resource)
  560. item.ResourceUrl = resourceUrl
  561. item.ResourceType = 1
  562. item.CreateTime = time.Now()
  563. newId, err := models.AddResource(item)
  564. if err != nil {
  565. br.Msg = "资源上传失败"
  566. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  567. return
  568. }
  569. resp := new(models.ResourceResp)
  570. resp.Id = newId
  571. resp.ResourceUrl = resourceUrl
  572. br.Msg = "上传成功"
  573. br.Ret = 200
  574. br.Success = true
  575. return
  576. }
  577. // @router /oss/get_sts_token [get]
  578. func (this *ResourceController) OssSTSToken() {
  579. br := new(models.BaseResponse).Init()
  580. defer func() {
  581. this.Data["json"] = br
  582. this.ServeJSON()
  583. }()
  584. ossClient := services.NewOssClient()
  585. if ossClient == nil {
  586. br.Msg = "上传失败"
  587. br.ErrMsg = "初始化OSS服务失败"
  588. return
  589. }
  590. resp, e := ossClient.GetUploadToken()
  591. if e != nil {
  592. br.Msg = "获取失败"
  593. br.ErrMsg = "获取OSS上传Token失败, Err: " + e.Error()
  594. return
  595. }
  596. br.Data = resp
  597. br.Msg = "获取成功"
  598. br.Ret = 200
  599. br.Success = true
  600. }
  601. // @router /file/download [get]
  602. func (this *ResourceAuthController) FileDownload() {
  603. br := new(models.BaseResponse).Init()
  604. defer func() {
  605. if br.ErrMsg == "" {
  606. br.IsSendEmail = false
  607. }
  608. this.Data["json"] = br
  609. this.ServeJSON()
  610. }()
  611. sysUser := this.SysUser
  612. if sysUser == nil {
  613. br.Msg = "请登录"
  614. br.ErrMsg = "请登录,SysUser Is Empty"
  615. br.Ret = 408
  616. return
  617. }
  618. fileEncode := this.GetString("FileUrl")
  619. fileEncode = strings.TrimSpace(fileEncode)
  620. if fileEncode == "" {
  621. br.Msg = "参数有误"
  622. return
  623. }
  624. fileByte, e := base64.StdEncoding.DecodeString(fileEncode)
  625. if e != nil {
  626. br.Msg = "下载失败"
  627. br.ErrMsg = "文件地址解析失败, Err: " + e.Error()
  628. return
  629. }
  630. fileUrl := string(fileByte)
  631. fileArr := strings.Split(fileUrl, "/")
  632. if len(fileArr) == 0 {
  633. br.Msg = "文件地址有误"
  634. return
  635. }
  636. fileName := fileArr[len(fileArr)-1]
  637. down, e := http.Get(fileUrl)
  638. if e != nil {
  639. br.Msg = "下载失败"
  640. br.ErrMsg = "文件下载失败, http get: " + e.Error()
  641. return
  642. }
  643. defer down.Body.Close()
  644. if down.StatusCode != http.StatusOK {
  645. br.Msg = "下载失败"
  646. br.ErrMsg = fmt.Sprintf("文件下载失败, http status: %d", down.StatusCode)
  647. return
  648. }
  649. localFilePath := fmt.Sprintf("%s%s", utils.GetRandStringNoSpecialChar(6), fileName)
  650. localFile, e := os.Create(localFilePath)
  651. if e != nil {
  652. br.Msg = "下载失败"
  653. br.ErrMsg = "生成本地文件失败, Err: " + e.Error()
  654. return
  655. }
  656. defer func() {
  657. if e = localFile.Close(); e != nil {
  658. fmt.Println("local file close err: ", e.Error())
  659. }
  660. if e = os.Remove(localFilePath); e != nil {
  661. fmt.Println("local file remove err: ", e.Error())
  662. }
  663. }()
  664. _, e = io.Copy(localFile, down.Body)
  665. if e != nil {
  666. br.Msg = "下载失败"
  667. br.ErrMsg = "复制文件资源失败, Err: " + e.Error()
  668. return
  669. }
  670. br.Ret = 200
  671. br.Msg = "下载成功"
  672. br.Success = true
  673. this.Ctx.Output.Download(localFilePath, fileName)
  674. }
  675. // @router /file/reload [get]
  676. func (this *ResourceController) FileReload() {
  677. fileUrl := `https://hzstatic.hzinsights.com/static/images/202202/20220208/Qr3dulOoVTJgyl8skH1jL1kv36RX.png`
  678. body, err := rdHttp.Get(fileUrl)
  679. if err != nil {
  680. fmt.Println("err: ", err)
  681. this.Ctx.WriteString("err: " + err.Error() + "")
  682. return
  683. }
  684. this.Ctx.ResponseWriter.Header().Set("Content-Type", "image/png")
  685. this.Ctx.ResponseWriter.Header().Set("Content-Length", strconv.Itoa(len(body)))
  686. _, err = this.Ctx.ResponseWriter.Write(body)
  687. if err != nil {
  688. http.Error(this.Ctx.ResponseWriter, "Failed to write response", http.StatusInternalServerError)
  689. return
  690. }
  691. }