useOss.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { getOssSecretKeyApi } from "@/pages/weComTask/API/weMaterial/weMaterial";
  2. import request from "@/utils/request";
  3. import { App } from "antd";
  4. import { RcFile } from "antd/es/upload";
  5. import { useState } from "react";
  6. export interface OssPromise {
  7. /**上传*/
  8. run: (file: RcFile, fileName?: string) => Promise<any>
  9. /**loding状态*/
  10. loading: boolean,
  11. }
  12. export function useOss(isLoading?: boolean): OssPromise {
  13. /**********************************/
  14. const { message } = App.useApp()
  15. const [loading, setLoding] = useState(false) //状态
  16. /**********************************/
  17. async function run(file: RcFile, fileName?: string) {//请求
  18. let hide: any
  19. if (isLoading) {
  20. hide = message.loading('上传中...', 0)
  21. }
  22. setLoding(true)
  23. let name = fileName || file.name.split('.')[0]
  24. let suffix = file.type
  25. if (!file.type) { suffix = 'audio/amr' }
  26. let res:any = await getOssSecretKeyApi({ filePrefix: name, suffix }).catch(error => {
  27. message.error(error?.message)
  28. setLoding(false)
  29. if (isLoading && hide) {
  30. hide()
  31. }
  32. })
  33. let msg: string = ''
  34. if (res?.data) {
  35. let ossData = res.data
  36. let formData = new FormData();
  37. Object.keys(ossData).forEach((key: string) => {
  38. if (key !== 'ossUrl') {
  39. formData.append(key, ossData[key])
  40. }
  41. })
  42. formData.append('file', file)
  43. let data = await request({ url: ossData?.ossUrl, method: 'POST', data: formData }).catch(error => {
  44. console.error(error)
  45. message.error(error)
  46. })
  47. if (data) {
  48. setLoding(false)
  49. if (isLoading && hide) {
  50. hide()
  51. message.success('上传成功')
  52. }
  53. return data
  54. } else {
  55. msg = '上传文件到OSSkey失败'
  56. message.error('上传文件到OSSkey失败')
  57. }
  58. } else {
  59. msg = '获取OSSkey失败'
  60. message.error('获取OSSkey失败')
  61. }
  62. setLoding(false)
  63. if (isLoading && hide) {
  64. hide()
  65. }
  66. return { code: 500, data: null, msg }
  67. }
  68. return { run, loading }
  69. }