giime 0.6.0-dev.1 → 0.6.0-dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +46 -31
- package/es/api/guardBasic/request.mjs.map +1 -1
- package/es/api/materialApi/cross/getAliOssConfigIds.d.ts +14 -0
- package/es/api/materialApi/cross/getAliOssConfigIds.mjs +8 -0
- package/es/api/materialApi/cross/getAliOssConfigIds.mjs.map +1 -0
- package/es/api/materialApi/cross/getOssAccessToken.d.ts +4 -1
- package/es/api/materialApi/cross/getOssAccessToken.mjs +2 -2
- package/es/api/materialApi/cross/getOssAccessToken.mjs.map +1 -1
- package/es/api/materialApi/cross/index.d.ts +1 -0
- package/es/api/materialApi/cross/index.mjs +1 -0
- package/es/api/materialApi/cross/index.mjs.map +1 -1
- package/es/api/materialApi/cross/postSaveFileResources.mjs +0 -1
- package/es/api/materialApi/cross/postSaveFileResources.mjs.map +1 -1
- package/es/api/materialApi/index.mjs +1 -0
- package/es/api/materialApi/index.mjs.map +1 -1
- package/es/components/src/business/uploadMaterial/UploadMaterial.vue.d.ts +8 -2
- package/es/components/src/business/uploadMaterial/index.d.ts +8 -2
- package/es/components/src/business/uploadMaterial/uploadMaterial.d.ts +4 -1
- package/es/components/src/composite/fileComponent/FileComponent.vue2.mjs +7 -6
- package/es/components/src/composite/fileComponent/FileComponent.vue2.mjs.map +1 -1
- package/es/components/src/composite/previewFile/PreviewFile.vue2.mjs +1 -1
- package/es/components/src/composite/previewFile/PreviewFile.vue2.mjs.map +1 -1
- package/es/components/src/composite/previewFile/previewFile.mjs +1 -1
- package/es/components/src/composite/previewFile/previewFile.mjs.map +1 -1
- package/es/components/src/composite/uploadFile/UploadFile.vue.d.ts +8 -2
- package/es/components/src/composite/uploadFile/UploadFile.vue.mjs +1 -1
- package/es/components/src/composite/uploadFile/UploadFile.vue2.mjs +141 -115
- package/es/components/src/composite/uploadFile/UploadFile.vue2.mjs.map +1 -1
- package/es/components/src/composite/uploadFile/index.d.ts +16 -4
- package/es/components/src/composite/uploadFile/uploadFile.d.ts +5 -3
- package/es/components/src/composite/uploadFile/uploadFile.mjs +4 -0
- package/es/components/src/composite/uploadFile/uploadFile.mjs.map +1 -1
- package/es/giime/component.mjs +4 -0
- package/es/giime/component.mjs.map +1 -1
- package/es/giime/index.mjs +1 -0
- package/es/giime/index.mjs.map +1 -1
- package/es/giime/version.d.ts +1 -1
- package/es/giime/version.mjs +1 -1
- package/es/giime/version.mjs.map +1 -1
- package/es/hooks/index.mjs +1 -0
- package/es/hooks/index.mjs.map +1 -1
- package/es/hooks/store/index.d.ts +1 -0
- package/es/hooks/store/index.mjs +1 -0
- package/es/hooks/store/index.mjs.map +1 -1
- package/es/hooks/store/useAliOssConfigIds/index.d.ts +20 -0
- package/es/hooks/store/useAliOssConfigIds/index.mjs +31 -0
- package/es/hooks/store/useAliOssConfigIds/index.mjs.map +1 -0
- package/es/index.css +46 -31
- package/es/utils/src/alioss/aliossPutHook.mjs +1 -1
- package/es/utils/src/alioss/aliossPutHook.mjs.map +1 -1
- package/es/utils/src/alioss/aliossToken.d.ts +9 -3
- package/es/utils/src/alioss/aliossToken.mjs +4 -4
- package/es/utils/src/alioss/aliossToken.mjs.map +1 -1
- package/es/utils/src/http/createAxios.d.ts +1 -0
- package/es/utils/src/http/createAxios.mjs +6 -3
- package/es/utils/src/http/createAxios.mjs.map +1 -1
- package/es/utils/src/http/devProxy.mjs.map +1 -1
- package/global.d.ts +2 -0
- package/lib/api/guardBasic/request.js.map +1 -1
- package/lib/api/materialApi/cross/getAliOssConfigIds.d.ts +14 -0
- package/lib/api/materialApi/cross/getAliOssConfigIds.js +10 -0
- package/lib/api/materialApi/cross/getAliOssConfigIds.js.map +1 -0
- package/lib/api/materialApi/cross/getOssAccessToken.d.ts +4 -1
- package/lib/api/materialApi/cross/getOssAccessToken.js +2 -2
- package/lib/api/materialApi/cross/getOssAccessToken.js.map +1 -1
- package/lib/api/materialApi/cross/index.d.ts +1 -0
- package/lib/api/materialApi/cross/index.js +2 -0
- package/lib/api/materialApi/cross/index.js.map +1 -1
- package/lib/api/materialApi/cross/postSaveFileResources.js +0 -1
- package/lib/api/materialApi/cross/postSaveFileResources.js.map +1 -1
- package/lib/api/materialApi/index.js +2 -0
- package/lib/api/materialApi/index.js.map +1 -1
- package/lib/components/src/business/uploadMaterial/UploadMaterial.vue.d.ts +8 -2
- package/lib/components/src/business/uploadMaterial/index.d.ts +8 -2
- package/lib/components/src/business/uploadMaterial/uploadMaterial.d.ts +4 -1
- package/lib/components/src/composite/fileComponent/FileComponent.vue2.js +7 -6
- package/lib/components/src/composite/fileComponent/FileComponent.vue2.js.map +1 -1
- package/lib/components/src/composite/previewFile/PreviewFile.vue2.js +1 -1
- package/lib/components/src/composite/previewFile/PreviewFile.vue2.js.map +1 -1
- package/lib/components/src/composite/previewFile/previewFile.js +1 -1
- package/lib/components/src/composite/previewFile/previewFile.js.map +1 -1
- package/lib/components/src/composite/uploadFile/UploadFile.vue.d.ts +8 -2
- package/lib/components/src/composite/uploadFile/UploadFile.vue.js +1 -1
- package/lib/components/src/composite/uploadFile/UploadFile.vue2.js +140 -114
- package/lib/components/src/composite/uploadFile/UploadFile.vue2.js.map +1 -1
- package/lib/components/src/composite/uploadFile/index.d.ts +16 -4
- package/lib/components/src/composite/uploadFile/uploadFile.d.ts +5 -3
- package/lib/components/src/composite/uploadFile/uploadFile.js +4 -0
- package/lib/components/src/composite/uploadFile/uploadFile.js.map +1 -1
- package/lib/giime/component.js +24 -20
- package/lib/giime/component.js.map +1 -1
- package/lib/giime/index.js +2 -0
- package/lib/giime/index.js.map +1 -1
- package/lib/giime/version.d.ts +1 -1
- package/lib/giime/version.js +1 -1
- package/lib/giime/version.js.map +1 -1
- package/lib/hooks/index.js +2 -0
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/store/index.d.ts +1 -0
- package/lib/hooks/store/index.js +2 -0
- package/lib/hooks/store/index.js.map +1 -1
- package/lib/hooks/store/useAliOssConfigIds/index.d.ts +20 -0
- package/lib/hooks/store/useAliOssConfigIds/index.js +33 -0
- package/lib/hooks/store/useAliOssConfigIds/index.js.map +1 -0
- package/lib/index.css +46 -31
- package/lib/utils/src/alioss/aliossPutHook.js +1 -1
- package/lib/utils/src/alioss/aliossPutHook.js.map +1 -1
- package/lib/utils/src/alioss/aliossToken.d.ts +9 -3
- package/lib/utils/src/alioss/aliossToken.js +4 -4
- package/lib/utils/src/alioss/aliossToken.js.map +1 -1
- package/lib/utils/src/http/createAxios.d.ts +1 -0
- package/lib/utils/src/http/createAxios.js +6 -3
- package/lib/utils/src/http/createAxios.js.map +1 -1
- package/lib/utils/src/http/devProxy.js.map +1 -1
- package/package.json +1 -1
- package/es/hooks/store/useAliossStsToken/index.d.ts +0 -16
- package/es/hooks/store/useAliossStsToken/index.mjs +0 -53
- package/es/hooks/store/useAliossStsToken/index.mjs.map +0 -1
- package/es/utils/src/alioss.d.ts +0 -32
- package/es/utils/src/alioss.mjs +0 -110
- package/es/utils/src/alioss.mjs.map +0 -1
- package/lib/hooks/store/useAliossStsToken/index.d.ts +0 -16
- package/lib/hooks/store/useAliossStsToken/index.js +0 -55
- package/lib/hooks/store/useAliossStsToken/index.js.map +0 -1
- package/lib/utils/src/alioss.d.ts +0 -32
- package/lib/utils/src/alioss.js +0 -113
- package/lib/utils/src/alioss.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aliossPutHook.js","sources":["../../../../../../packages/utils/src/alioss/aliossPutHook.ts"],"sourcesContent":["import { defineStore } from 'pinia';\r\nimport { createEventHook } from '@vueuse/core';\r\nimport { md5 } from 'js-md5';\r\nimport AliOss from 'ali-oss';\r\nimport { type PostSaveFileResourcesData, getAdFileExist, postSaveFileResources } from '@giime/api/materialApi';\r\nimport useAliossTokenStore from './aliossToken';\r\n\r\nexport type PostSaveFileResponse = PostSaveFileResourcesData;\r\nexport type UploadAliOssFile = File & { uid: number };\r\n\r\n/** 上传文件到阿里云 */\r\nexport type AliOssParams = {\r\n /** 资源文件 */\r\n file: UploadAliOssFile;\r\n /** 文件名 */\r\n fileName?: string;\r\n /** 文件存储路径 */\r\n folder?: string;\r\n /** 文件存储位置 */\r\n seat?: string;\r\n /** 并行上传数量 */\r\n parallel?: number;\r\n /** 并行分片大小 */\r\n partSize?: number;\r\n /** 阿里上传配置 */\r\n options?: { [key: string]: any };\r\n /** 阿里服务器 Bucket 名称 */\r\n bucket?: string;\r\n /** cdn */\r\n cdn?: string;\r\n /** 文件是否保存入库 */\r\n saveStore?: boolean;\r\n};\r\n\r\n/** 返回数据 */\r\nexport type AliOssResponse = {\r\n /** 文件地址 */\r\n url: string;\r\n /** 文件名 */\r\n name: string;\r\n /** 文件唯一标识 */\r\n uid: number;\r\n /** 文件最后修改时间 */\r\n lastModified: number;\r\n /** 文件md5 */\r\n md5: string;\r\n /** 文件大小 */\r\n size: number;\r\n /** 文件后缀 */\r\n type: string;\r\n /** 文件库是否存在 */\r\n isExist: boolean;\r\n};\r\n\r\nexport const ts_md5_file = (file: File) => {\r\n return new Promise<string>(resolve => {\r\n const reader = new FileReader();\r\n reader.onload = async function (e) {\r\n const binary = (e.target as any).result;\r\n resolve(md5(binary));\r\n };\r\n reader.readAsArrayBuffer(file);\r\n });\r\n};\r\n\r\n/** 文件分片 */\r\nexport const getParallelPartSize = (size: number) => {\r\n const thresholds = [\r\n {\r\n max: 5,\r\n parallel: 1,\r\n multiplier: 5,\r\n },\r\n {\r\n max: 10,\r\n parallel: 2,\r\n multiplier: 4,\r\n },\r\n {\r\n max: 30,\r\n parallel: 4,\r\n multiplier: 5,\r\n },\r\n {\r\n max: 50,\r\n parallel: 6,\r\n multiplier: 6,\r\n },\r\n {\r\n max: Number.POSITIVE_INFINITY,\r\n parallel: 8,\r\n multiplier: 8,\r\n },\r\n ];\r\n const { parallel, multiplier } = thresholds.find(({ max }) => size <= max) || thresholds[thresholds.length - 1];\r\n\r\n return {\r\n parallel,\r\n partSize: multiplier * 1024 * 1024,\r\n };\r\n};\r\n\r\n/** 上传 Hook */\r\nexport const useAliossHookStore = defineStore('aliossHook', () => {\r\n const aliossResult = createEventHook<AliOssResponse>();\r\n const aliossError = createEventHook<any>();\r\n const saveFileResult = createEventHook<PostSaveFileResponse>();\r\n const saveFileError = createEventHook<any>();\r\n\r\n /** 检测广告素材是否已存在 */\r\n const getFileExist = async ({\r\n md5Code,\r\n ext,\r\n name,\r\n size,\r\n uid,\r\n lastModified,\r\n }: {\r\n md5Code: string;\r\n ext: string;\r\n name: string;\r\n size: number;\r\n uid: number;\r\n lastModified: number;\r\n }) => {\r\n // eslint-disable-next-line no-async-promise-executor\r\n return new Promise<AliOssResponse | false>(async resolve => {\r\n const { data } = await getAdFileExist({ md5Code, ext });\r\n if (data.code !== 0 || data.data.count === 0) {\r\n return resolve(false);\r\n }\r\n const result = {\r\n name,\r\n uid,\r\n lastModified,\r\n size,\r\n url: data.data.url,\r\n md5: md5Code,\r\n type: ext,\r\n isExist: true,\r\n };\r\n resolve(result);\r\n aliossResult.trigger(result);\r\n });\r\n };\r\n\r\n /** 上传文件 */\r\n const uploadFile = async ({ file, fileName, folder, seat, parallel, partSize, options, bucket, cdn, saveStore }: AliOssParams) => {\r\n let { name, uid, lastModified, size } = file;\r\n const ext = name.match(/\\.(\\w+)$/)?.[0] || '';\r\n name = (fileName || name).slice(0, name.lastIndexOf('.'));\r\n const md5Code = await ts_md5_file(file);\r\n const FileName = name + ext;\r\n const type = ext.replaceAll('.', '');\r\n\r\n try {\r\n let result = await getFileExist({ md5Code, ext: type, name: FileName, size, uid, lastModified });\r\n if (result) return result;\r\n\r\n // 文件存储路径\r\n const timestr = Date.now();\r\n const path = `${folder ?? 'material'}/${seat ?? 'default'}/file-${timestr}-${md5Code}${ext}`;\r\n\r\n const P = getParallelPartSize(size);\r\n options = {\r\n ...P,\r\n ...{ parallel, partSize },\r\n ContentDisposition: `attachment;filename=${encodeURIComponent(name)}${ext};filename*=${encodeURIComponent(name)}${ext}`,\r\n ...options,\r\n };\r\n\r\n // 阿里云临时上传权限\r\n const { AccessKeyId, AccessKeySecret, SecurityToken } = await useAliossTokenStore().getAliossTokenAsync();\r\n\r\n const client = new AliOss({\r\n // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。\r\n region: 'oss-cn-shenzhen',\r\n // 从STS服务获取的临时访问密钥(AccessKey ID、AccessKey Secret、StsToken)。\r\n accessKeyId: AccessKeyId,\r\n accessKeySecret: AccessKeySecret,\r\n stsToken: SecurityToken,\r\n // 刷新临时访问凭证的时间间隔,单位为毫秒。\r\n refreshSTSTokenInterval: 300000,\r\n // 填写Bucket名称。\r\n bucket: bucket ?? 'giikin-material',\r\n });\r\n\r\n const upload = options.parallel === 1 ? 'put' : 'multipartUpload';\r\n const { res } = await client[upload](path, file, options);\r\n if (res.status !== 200) {\r\n aliossError.trigger(res);\r\n return res;\r\n }\r\n cdn = cdn ?? 'https://sucai.giikin.cn/';\r\n const resultUrl = cdn + path;\r\n result = {\r\n url: resultUrl,\r\n name: name + ext,\r\n md5: md5Code,\r\n type: ext.replaceAll('.', ''),\r\n uid,\r\n lastModified,\r\n size,\r\n isExist: false,\r\n };\r\n if (saveStore) {\r\n postSaveFile({ url: resultUrl, md5_code: md5Code, file_size: size });\r\n }\r\n aliossResult.trigger(result);\r\n return result;\r\n } catch (error) {\r\n aliossError.trigger(error);\r\n return error;\r\n }\r\n };\r\n\r\n /** 文件入库 */\r\n const postSaveFile = async ({ url, md5_code, file_size }: PostSaveFileResourcesData) => {\r\n try {\r\n const { data } = await postSaveFileResources({ fileData: { url, md5_code, file_size } });\r\n if (data?.code !== 0) {\r\n saveFileError.trigger(data);\r\n return data;\r\n }\r\n const result = {\r\n url,\r\n md5_code,\r\n file_size,\r\n };\r\n saveFileResult.trigger(result);\r\n return result;\r\n } catch (error) {\r\n saveFileError.trigger(error);\r\n return error;\r\n }\r\n };\r\n return {\r\n aliossResult: aliossResult.on,\r\n aliossError: aliossError.on,\r\n saveFileResult: saveFileResult.on,\r\n saveFileError: saveFileError.on,\r\n uploadFile,\r\n postSaveFile,\r\n };\r\n});\r\n"],"names":["md5","defineStore","createEventHook","getAdFileExist","useAliossTokenStore","postSaveFileResources"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aliossPutHook.js","sources":["../../../../../../packages/utils/src/alioss/aliossPutHook.ts"],"sourcesContent":["import { defineStore } from 'pinia';\r\nimport { createEventHook } from '@vueuse/core';\r\nimport { md5 } from 'js-md5';\r\nimport AliOss from 'ali-oss';\r\nimport { type PostSaveFileResourcesData, getAdFileExist, postSaveFileResources } from '@giime/api/materialApi';\r\nimport useAliossTokenStore from './aliossToken';\r\n\r\nexport type PostSaveFileResponse = PostSaveFileResourcesData;\r\nexport type UploadAliOssFile = File & { uid: number };\r\n\r\n/** 上传文件到阿里云 */\r\nexport type AliOssParams = {\r\n /** 资源文件 */\r\n file: UploadAliOssFile;\r\n /** 文件名 */\r\n fileName?: string;\r\n /** 文件存储路径 */\r\n folder?: string;\r\n /** 文件存储位置 */\r\n seat?: string;\r\n /** 并行上传数量 */\r\n parallel?: number;\r\n /** 并行分片大小 */\r\n partSize?: number;\r\n /** 阿里上传配置 */\r\n options?: { [key: string]: any };\r\n /** 阿里服务器 Bucket 名称 */\r\n bucket?: string;\r\n /** cdn */\r\n cdn?: string;\r\n /** 文件是否保存入库 */\r\n saveStore?: boolean;\r\n};\r\n\r\n/** 返回数据 */\r\nexport type AliOssResponse = {\r\n /** 文件地址 */\r\n url: string;\r\n /** 文件名 */\r\n name: string;\r\n /** 文件唯一标识 */\r\n uid: number;\r\n /** 文件最后修改时间 */\r\n lastModified: number;\r\n /** 文件md5 */\r\n md5: string;\r\n /** 文件大小 */\r\n size: number;\r\n /** 文件后缀 */\r\n type: string;\r\n /** 文件库是否存在 */\r\n isExist: boolean;\r\n};\r\n\r\nexport const ts_md5_file = (file: File) => {\r\n return new Promise<string>(resolve => {\r\n const reader = new FileReader();\r\n reader.onload = async function (e) {\r\n const binary = (e.target as any).result;\r\n resolve(md5(binary));\r\n };\r\n reader.readAsArrayBuffer(file);\r\n });\r\n};\r\n\r\n/** 文件分片 */\r\nexport const getParallelPartSize = (size: number) => {\r\n const thresholds = [\r\n {\r\n max: 5,\r\n parallel: 1,\r\n multiplier: 5,\r\n },\r\n {\r\n max: 10,\r\n parallel: 2,\r\n multiplier: 4,\r\n },\r\n {\r\n max: 30,\r\n parallel: 4,\r\n multiplier: 5,\r\n },\r\n {\r\n max: 50,\r\n parallel: 6,\r\n multiplier: 6,\r\n },\r\n {\r\n max: Number.POSITIVE_INFINITY,\r\n parallel: 8,\r\n multiplier: 8,\r\n },\r\n ];\r\n const { parallel, multiplier } = thresholds.find(({ max }) => size <= max) || thresholds[thresholds.length - 1];\r\n\r\n return {\r\n parallel,\r\n partSize: multiplier * 1024 * 1024,\r\n };\r\n};\r\n\r\n/** 上传 Hook */\r\nexport const useAliossHookStore = defineStore('aliossHook', () => {\r\n const aliossResult = createEventHook<AliOssResponse>();\r\n const aliossError = createEventHook<any>();\r\n const saveFileResult = createEventHook<PostSaveFileResponse>();\r\n const saveFileError = createEventHook<any>();\r\n\r\n /** 检测广告素材是否已存在 */\r\n const getFileExist = async ({\r\n md5Code,\r\n ext,\r\n name,\r\n size,\r\n uid,\r\n lastModified,\r\n }: {\r\n md5Code: string;\r\n ext: string;\r\n name: string;\r\n size: number;\r\n uid: number;\r\n lastModified: number;\r\n }) => {\r\n // eslint-disable-next-line no-async-promise-executor\r\n return new Promise<AliOssResponse | false>(async resolve => {\r\n const { data } = await getAdFileExist({ md5Code, ext });\r\n if (data.code !== 0 || data.data.count === 0) {\r\n return resolve(false);\r\n }\r\n const result = {\r\n name,\r\n uid,\r\n lastModified,\r\n size,\r\n url: data.data.url,\r\n md5: md5Code,\r\n type: ext,\r\n isExist: true,\r\n };\r\n resolve(result);\r\n aliossResult.trigger(result);\r\n });\r\n };\r\n\r\n /** 上传文件 */\r\n const uploadFile = async ({ file, fileName, folder, seat, parallel, partSize, options, bucket, cdn, saveStore }: AliOssParams) => {\r\n let { name, uid, lastModified, size } = file;\r\n const ext = name.match(/\\.(\\w+)$/)?.[0] || '';\r\n name = (fileName || name).slice(0, name.lastIndexOf('.'));\r\n const md5Code = await ts_md5_file(file);\r\n const FileName = name + ext;\r\n const type = ext.replaceAll('.', '');\r\n\r\n try {\r\n let result = await getFileExist({ md5Code, ext: type, name: FileName, size, uid, lastModified });\r\n if (result) return result;\r\n\r\n // 文件存储路径\r\n const timestr = Date.now();\r\n const path = `${folder ?? 'material'}/${seat ?? 'default'}/file-${timestr}-${md5Code}${ext}`;\r\n\r\n const P = getParallelPartSize(size);\r\n options = {\r\n ...P,\r\n ...{ parallel, partSize },\r\n ContentDisposition: `attachment;filename=${encodeURIComponent(name)}${ext};filename*=${encodeURIComponent(name)}${ext}`,\r\n ...options,\r\n };\r\n\r\n // 阿里云临时上传权限\r\n const { AccessKeyId, AccessKeySecret, SecurityToken } = await useAliossTokenStore().getAliossTokenAsync({ config_id: null });\r\n\r\n const client = new AliOss({\r\n // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。\r\n region: 'oss-cn-shenzhen',\r\n // 从STS服务获取的临时访问密钥(AccessKey ID、AccessKey Secret、StsToken)。\r\n accessKeyId: AccessKeyId,\r\n accessKeySecret: AccessKeySecret,\r\n stsToken: SecurityToken,\r\n // 刷新临时访问凭证的时间间隔,单位为毫秒。\r\n refreshSTSTokenInterval: 300000,\r\n // 填写Bucket名称。\r\n bucket: bucket ?? 'giikin-material',\r\n });\r\n\r\n const upload = options.parallel === 1 ? 'put' : 'multipartUpload';\r\n const { res } = await client[upload](path, file, options);\r\n if (res.status !== 200) {\r\n aliossError.trigger(res);\r\n return res;\r\n }\r\n cdn = cdn ?? 'https://sucai.giikin.cn/';\r\n const resultUrl = cdn + path;\r\n result = {\r\n url: resultUrl,\r\n name: name + ext,\r\n md5: md5Code,\r\n type: ext.replaceAll('.', ''),\r\n uid,\r\n lastModified,\r\n size,\r\n isExist: false,\r\n };\r\n if (saveStore) {\r\n postSaveFile({ url: resultUrl, md5_code: md5Code, file_size: size });\r\n }\r\n aliossResult.trigger(result);\r\n return result;\r\n } catch (error) {\r\n aliossError.trigger(error);\r\n return error;\r\n }\r\n };\r\n\r\n /** 文件入库 */\r\n const postSaveFile = async ({ url, md5_code, file_size }: PostSaveFileResourcesData) => {\r\n try {\r\n const { data } = await postSaveFileResources({ fileData: { url, md5_code, file_size } });\r\n if (data?.code !== 0) {\r\n saveFileError.trigger(data);\r\n return data;\r\n }\r\n const result = {\r\n url,\r\n md5_code,\r\n file_size,\r\n };\r\n saveFileResult.trigger(result);\r\n return result;\r\n } catch (error) {\r\n saveFileError.trigger(error);\r\n return error;\r\n }\r\n };\r\n return {\r\n aliossResult: aliossResult.on,\r\n aliossError: aliossError.on,\r\n saveFileResult: saveFileResult.on,\r\n saveFileError: saveFileError.on,\r\n uploadFile,\r\n postSaveFile,\r\n };\r\n});\r\n"],"names":["md5","defineStore","createEventHook","getAdFileExist","useAliossTokenStore","postSaveFileResources"],"mappings":"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"}
|
|
@@ -6,12 +6,18 @@ import { type GetOssAccessTokenResponseData } from '../../../api/materialApi';
|
|
|
6
6
|
**/
|
|
7
7
|
declare const useAliossTokenStore: import("pinia").StoreDefinition<"aliossToken", import("pinia")._UnwrapAll<Pick<{
|
|
8
8
|
isLoading: import("vue").Ref<boolean>;
|
|
9
|
-
getAliossTokenAsync: (
|
|
9
|
+
getAliossTokenAsync: (params: {
|
|
10
|
+
config_id: string | null;
|
|
11
|
+
}) => Promise<GetOssAccessTokenResponseData>;
|
|
10
12
|
}, "isLoading">>, Pick<{
|
|
11
13
|
isLoading: import("vue").Ref<boolean>;
|
|
12
|
-
getAliossTokenAsync: (
|
|
14
|
+
getAliossTokenAsync: (params: {
|
|
15
|
+
config_id: string | null;
|
|
16
|
+
}) => Promise<GetOssAccessTokenResponseData>;
|
|
13
17
|
}, never>, Pick<{
|
|
14
18
|
isLoading: import("vue").Ref<boolean>;
|
|
15
|
-
getAliossTokenAsync: (
|
|
19
|
+
getAliossTokenAsync: (params: {
|
|
20
|
+
config_id: string | null;
|
|
21
|
+
}) => Promise<GetOssAccessTokenResponseData>;
|
|
16
22
|
}, "getAliossTokenAsync">>;
|
|
17
23
|
export default useAliossTokenStore;
|
|
@@ -19,14 +19,14 @@ const useAliossTokenStore = pinia.defineStore("aliossToken", () => {
|
|
|
19
19
|
const time = new Date(new Date(Expiration ?? 0).getTime() - 1e4);
|
|
20
20
|
Cookies.set("aliossStsToken", JSON.stringify(data), { expires: time });
|
|
21
21
|
};
|
|
22
|
-
const getAliossToken = async () => {
|
|
22
|
+
const getAliossToken = async (params) => {
|
|
23
23
|
const aliossStsToken = Cookies.get("aliossStsToken");
|
|
24
24
|
if (aliossStsToken) {
|
|
25
25
|
return JSON.parse(aliossStsToken);
|
|
26
26
|
}
|
|
27
27
|
isLoading.value = true;
|
|
28
28
|
try {
|
|
29
|
-
const { data } = await getOssAccessToken.getOssAccessToken();
|
|
29
|
+
const { data } = await getOssAccessToken.getOssAccessToken(params);
|
|
30
30
|
if (data.code === 0) {
|
|
31
31
|
setCookie(data.data);
|
|
32
32
|
aliossTokenResult.trigger(data.data);
|
|
@@ -36,12 +36,12 @@ const useAliossTokenStore = pinia.defineStore("aliossToken", () => {
|
|
|
36
36
|
isLoading.value = false;
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
|
-
const getAliossTokenAsync = () => {
|
|
39
|
+
const getAliossTokenAsync = (params) => {
|
|
40
40
|
return new Promise((resolve) => {
|
|
41
41
|
if (isLoading.value) {
|
|
42
42
|
aliossTokenResult.on((value) => resolve(value));
|
|
43
43
|
} else {
|
|
44
|
-
resolve(getAliossToken());
|
|
44
|
+
resolve(getAliossToken(params));
|
|
45
45
|
}
|
|
46
46
|
});
|
|
47
47
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aliossToken.js","sources":["../../../../../../packages/utils/src/alioss/aliossToken.ts"],"sourcesContent":["import { ref } from 'vue';\r\nimport { defineStore } from 'pinia';\r\nimport { type GetOssAccessTokenResponseData, getOssAccessToken } from '@giime/api/materialApi';\r\nimport { createEventHook } from '@vueuse/core';\r\nimport Cookies from 'js-cookie';\r\n\r\n/**\r\n * @description 素材上传权限\r\n * @param {*}\r\n * @return {*}\r\n **/\r\n\r\nconst useAliossTokenStore = defineStore('aliossToken', () => {\r\n const isLoading = ref(false);\r\n const aliossTokenResult = createEventHook<GetOssAccessTokenResponseData>();\r\n\r\n const setCookie = (data: GetOssAccessTokenResponseData) => {\r\n if (!data) return;\r\n const { Expiration } = data;\r\n const time = new Date(new Date(Expiration ?? 0).getTime() - 10000); //-10秒作为缓冲\r\n Cookies.set('aliossStsToken', JSON.stringify(data), { expires: time });\r\n };\r\n\r\n /* 请求临时上传权限 */\r\n const getAliossToken = async () => {\r\n const aliossStsToken = Cookies.get('aliossStsToken');\r\n if (aliossStsToken) {\r\n return JSON.parse(aliossStsToken) as GetOssAccessTokenResponseData;\r\n }\r\n isLoading.value = true;\r\n try {\r\n const { data } = await getOssAccessToken();\r\n if (data.code === 0) {\r\n setCookie(data.data);\r\n aliossTokenResult.trigger(data.data);\r\n }\r\n return data.data;\r\n } finally {\r\n isLoading.value = false;\r\n }\r\n };\r\n\r\n /* 获取 alioss 临时上传 token*/\r\n const getAliossTokenAsync = () => {\r\n /* 若正在请求请求临时token接口 则其他后进来的等待 */\r\n return new Promise<GetOssAccessTokenResponseData>(resolve => {\r\n if (isLoading.value) {\r\n aliossTokenResult.on(value => resolve(value));\r\n } else {\r\n resolve(getAliossToken());\r\n }\r\n });\r\n };\r\n\r\n return {\r\n isLoading,\r\n getAliossTokenAsync,\r\n };\r\n});\r\n\r\nexport default useAliossTokenStore;\r\n"],"names":["defineStore","ref","createEventHook","getOssAccessToken"],"mappings":";;;;;;;;;;;AAYM,MAAA,mBAAA,GAAsBA,iBAAY,CAAA,aAAA,EAAe,MAAM;AAC3D,EAAM,MAAA,SAAA,GAAYC,QAAI,KAAK,CAAA,CAAA;AAC3B,EAAA,MAAM,oBAAoBC,oBAA+C,EAAA,CAAA;AAEzE,EAAM,MAAA,SAAA,GAAY,CAAC,IAAwC,KAAA;AACzD,IAAA,IAAI,CAAC,IAAA;AAAM,MAAA,OAAA;AACX,IAAM,MAAA,EAAE,YAAe,GAAA,IAAA,CAAA;AACvB,IAAM,MAAA,IAAA,GAAO,IAAI,IAAA,CAAK,IAAI,IAAA,CAAK,cAAc,CAAC,CAAA,CAAE,OAAQ,EAAA,GAAI,GAAK,CAAA,CAAA;AACjE,IAAQ,OAAA,CAAA,GAAA,CAAI,kBAAkB,IAAK,CAAA,SAAA,CAAU,IAAI,CAAG,EAAA,EAAE,OAAS,EAAA,IAAA,EAAM,CAAA,CAAA;AAAA,GACvE,CAAA;AAGA,
|
|
1
|
+
{"version":3,"file":"aliossToken.js","sources":["../../../../../../packages/utils/src/alioss/aliossToken.ts"],"sourcesContent":["import { ref } from 'vue';\r\nimport { defineStore } from 'pinia';\r\nimport { type GetOssAccessTokenResponseData, getOssAccessToken } from '@giime/api/materialApi';\r\nimport { createEventHook } from '@vueuse/core';\r\nimport Cookies from 'js-cookie';\r\n\r\n/**\r\n * @description 素材上传权限\r\n * @param {*}\r\n * @return {*}\r\n **/\r\n\r\nconst useAliossTokenStore = defineStore('aliossToken', () => {\r\n const isLoading = ref(false);\r\n const aliossTokenResult = createEventHook<GetOssAccessTokenResponseData>();\r\n\r\n const setCookie = (data: GetOssAccessTokenResponseData) => {\r\n if (!data) return;\r\n const { Expiration } = data;\r\n const time = new Date(new Date(Expiration ?? 0).getTime() - 10000); //-10秒作为缓冲\r\n Cookies.set('aliossStsToken', JSON.stringify(data), { expires: time });\r\n };\r\n\r\n /* 请求临时上传权限 */\r\n const getAliossToken = async (params: { config_id: string | null }) => {\r\n const aliossStsToken = Cookies.get('aliossStsToken');\r\n if (aliossStsToken) {\r\n return JSON.parse(aliossStsToken) as GetOssAccessTokenResponseData;\r\n }\r\n isLoading.value = true;\r\n try {\r\n const { data } = await getOssAccessToken(params);\r\n if (data.code === 0) {\r\n setCookie(data.data);\r\n aliossTokenResult.trigger(data.data);\r\n }\r\n return data.data;\r\n } finally {\r\n isLoading.value = false;\r\n }\r\n };\r\n\r\n /* 获取 alioss 临时上传 token*/\r\n const getAliossTokenAsync = (params: { config_id: string | null }) => {\r\n /* 若正在请求请求临时token接口 则其他后进来的等待 */\r\n return new Promise<GetOssAccessTokenResponseData>(resolve => {\r\n if (isLoading.value) {\r\n aliossTokenResult.on(value => resolve(value));\r\n } else {\r\n resolve(getAliossToken(params));\r\n }\r\n });\r\n };\r\n\r\n return {\r\n isLoading,\r\n getAliossTokenAsync,\r\n };\r\n});\r\n\r\nexport default useAliossTokenStore;\r\n"],"names":["defineStore","ref","createEventHook","getOssAccessToken"],"mappings":";;;;;;;;;;;AAYM,MAAA,mBAAA,GAAsBA,iBAAY,CAAA,aAAA,EAAe,MAAM;AAC3D,EAAM,MAAA,SAAA,GAAYC,QAAI,KAAK,CAAA,CAAA;AAC3B,EAAA,MAAM,oBAAoBC,oBAA+C,EAAA,CAAA;AAEzE,EAAM,MAAA,SAAA,GAAY,CAAC,IAAwC,KAAA;AACzD,IAAA,IAAI,CAAC,IAAA;AAAM,MAAA,OAAA;AACX,IAAM,MAAA,EAAE,YAAe,GAAA,IAAA,CAAA;AACvB,IAAM,MAAA,IAAA,GAAO,IAAI,IAAA,CAAK,IAAI,IAAA,CAAK,cAAc,CAAC,CAAA,CAAE,OAAQ,EAAA,GAAI,GAAK,CAAA,CAAA;AACjE,IAAQ,OAAA,CAAA,GAAA,CAAI,kBAAkB,IAAK,CAAA,SAAA,CAAU,IAAI,CAAG,EAAA,EAAE,OAAS,EAAA,IAAA,EAAM,CAAA,CAAA;AAAA,GACvE,CAAA;AAGA,EAAM,MAAA,cAAA,GAAiB,OAAO,MAAyC,KAAA;AACrE,IAAM,MAAA,cAAA,GAAiB,OAAQ,CAAA,GAAA,CAAI,gBAAgB,CAAA,CAAA;AACnD,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAO,OAAA,IAAA,CAAK,MAAM,cAAc,CAAA,CAAA;AAAA,KAClC;AACA,IAAA,SAAA,CAAU,KAAQ,GAAA,IAAA,CAAA;AAClB,IAAI,IAAA;AACF,MAAA,MAAM,EAAE,IAAA,EAAS,GAAA,MAAMC,oCAAkB,MAAM,CAAA,CAAA;AAC/C,MAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,QAAA,SAAA,CAAU,KAAK,IAAI,CAAA,CAAA;AACnB,QAAkB,iBAAA,CAAA,OAAA,CAAQ,KAAK,IAAI,CAAA,CAAA;AAAA,OACrC;AACA,MAAA,OAAO,IAAK,CAAA,IAAA,CAAA;AAAA,KACZ,SAAA;AACA,MAAA,SAAA,CAAU,KAAQ,GAAA,KAAA,CAAA;AAAA,KACpB;AAAA,GACF,CAAA;AAGA,EAAM,MAAA,mBAAA,GAAsB,CAAC,MAAyC,KAAA;AAEpE,IAAO,OAAA,IAAI,QAAuC,CAAW,OAAA,KAAA;AAC3D,MAAA,IAAI,UAAU,KAAO,EAAA;AACnB,QAAA,iBAAA,CAAkB,EAAG,CAAA,CAAA,KAAA,KAAS,OAAQ,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,OACvC,MAAA;AACL,QAAQ,OAAA,CAAA,cAAA,CAAe,MAAM,CAAC,CAAA,CAAA;AAAA,OAChC;AAAA,KACD,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,mBAAA;AAAA,GACF,CAAA;AACF,CAAC;;;;"}
|
|
@@ -3,6 +3,7 @@ export interface CreateAxiosConfig extends CreateAxiosDefaults {
|
|
|
3
3
|
baseURL: string;
|
|
4
4
|
/**服务器调用成功的code 一般是 0 或 200 */
|
|
5
5
|
successCode: number;
|
|
6
|
+
hideAuthorization?: boolean;
|
|
6
7
|
}
|
|
7
8
|
export declare const createAxios: (config: CreateAxiosConfig, options?: {
|
|
8
9
|
requestInterceptors?: ((config: InternalAxiosRequestConfig<any>) => any) | undefined;
|
|
@@ -10,6 +10,7 @@ var errorMessage = require('./errorMessage.js');
|
|
|
10
10
|
|
|
11
11
|
const createAxios = (config, options) => {
|
|
12
12
|
const successCode = config.successCode ?? 0;
|
|
13
|
+
const hideAuthorization = config.hideAuthorization ?? false;
|
|
13
14
|
const service = axios.create({
|
|
14
15
|
withCredentials: true,
|
|
15
16
|
// send cookies when cross-domain requests
|
|
@@ -28,9 +29,11 @@ const createAxios = (config, options) => {
|
|
|
28
29
|
if (!config2.params) {
|
|
29
30
|
config2.params = {};
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
if (!hideAuthorization) {
|
|
33
|
+
config2.params._token = _token;
|
|
34
|
+
config2.params._user = _user;
|
|
35
|
+
config2.headers.Authorization = `Bearer ${_token}`;
|
|
36
|
+
}
|
|
34
37
|
await options?.requestInterceptors?.(config2);
|
|
35
38
|
return config2;
|
|
36
39
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAxios.js","sources":["../../../../../../packages/utils/src/http/createAxios.ts"],"sourcesContent":["import axios from 'axios';\nimport { ElMessage } from 'element-plus';\nimport Cookies from 'js-cookie';\nimport { useLoginStore } from '@giime/hooks/store/useLogin';\nimport { isNumber } from '../is';\nimport { res401Interceptors } from './interceptors';\nimport { responseErrorMessage } from './errorMessage';\nimport type { AxiosError, CreateAxiosDefaults, InternalAxiosRequestConfig } from 'axios';\nexport interface CreateAxiosConfig extends CreateAxiosDefaults {\n baseURL: string;\n /**服务器调用成功的code 一般是 0 或 200 */\n successCode: number;\n}\n\nexport const createAxios = (\n config: CreateAxiosConfig,\n options?: {\n requestInterceptors?: (config: InternalAxiosRequestConfig<any>) => any;\n },\n) => {\n const successCode = config.successCode ?? 0;\n const service = axios.create({\n withCredentials: true, // send cookies when cross-domain requests\n timeout: 120_000,\n headers: {\n 'content-type': 'application/json',\n Accept: '*/*',\n },\n ...config,\n });\n\n // 请求拦截器\n service.interceptors.request.use(\n async config => {\n const logingStore = useLoginStore();\n const _token = Cookies.get('token') ?? logingStore.userToken;\n const _user = Cookies.get('sso_user_id') ?? logingStore.userId;\n if (!config.params) {\n config.params = {};\n }\n config.params._token = _token;\n
|
|
1
|
+
{"version":3,"file":"createAxios.js","sources":["../../../../../../packages/utils/src/http/createAxios.ts"],"sourcesContent":["import axios from 'axios';\r\nimport { ElMessage } from 'element-plus';\r\nimport Cookies from 'js-cookie';\r\nimport { useLoginStore } from '@giime/hooks/store/useLogin';\r\nimport { isNumber } from '../is';\r\nimport { res401Interceptors } from './interceptors';\r\nimport { responseErrorMessage } from './errorMessage';\r\nimport type { AxiosError, CreateAxiosDefaults, InternalAxiosRequestConfig } from 'axios';\r\nexport interface CreateAxiosConfig extends CreateAxiosDefaults {\r\n baseURL: string;\r\n /**服务器调用成功的code 一般是 0 或 200 */\r\n successCode: number;\r\n // 是否隐藏Authorization\r\n hideAuthorization?: boolean;\r\n}\r\n\r\nexport const createAxios = (\r\n config: CreateAxiosConfig,\r\n options?: {\r\n requestInterceptors?: (config: InternalAxiosRequestConfig<any>) => any;\r\n },\r\n) => {\r\n const successCode = config.successCode ?? 0;\r\n const hideAuthorization = config.hideAuthorization ?? false;\r\n const service = axios.create({\r\n withCredentials: true, // send cookies when cross-domain requests\r\n timeout: 120_000,\r\n headers: {\r\n 'content-type': 'application/json',\r\n Accept: '*/*',\r\n },\r\n ...config,\r\n });\r\n\r\n // 请求拦截器\r\n service.interceptors.request.use(\r\n async config => {\r\n const logingStore = useLoginStore();\r\n const _token = Cookies.get('token') ?? logingStore.userToken;\r\n const _user = Cookies.get('sso_user_id') ?? logingStore.userId;\r\n if (!config.params) {\r\n config.params = {};\r\n }\r\n if (!hideAuthorization) {\r\n config.params._token = _token;\r\n config.params._user = _user;\r\n config.headers.Authorization = `Bearer ${_token}`;\r\n }\r\n\r\n await options?.requestInterceptors?.(config);\r\n return config;\r\n },\r\n error => {\r\n console.error('请求错误', error); // for debug\r\n return Promise.reject(error);\r\n },\r\n );\r\n // 添加响应拦截器\r\n service.interceptors.response.use(\r\n async response => {\r\n // 对响应数据做点什么\r\n const res = response.data;\r\n const msg = (res?.comment ?? res?.message ?? res?.errMsg ?? res?.msg) || '接口请求错误';\r\n if (!isNumber(res?.code)) {\r\n return response;\r\n }\r\n // 成功情况\r\n else if (res.code === successCode || res.errCode === successCode) {\r\n return response;\r\n }\r\n // 401\r\n else if (res.code === 401) {\r\n const res = await res401Interceptors(service, response.config);\r\n return res;\r\n }\r\n ElMessage({\r\n message: msg,\r\n type: 'error',\r\n grouping: true,\r\n duration: 5 * 1000,\r\n showClose: true,\r\n });\r\n return Promise.reject(response);\r\n // return response;\r\n },\r\n async (err: AxiosError) => {\r\n console.error(err.config);\r\n if (err?.response?.status === 401 && !err.message.includes('timeout')) {\r\n const res = await res401Interceptors(service, err.config!);\r\n return res;\r\n } else {\r\n // 对响应错误做点什么\r\n responseErrorMessage(err);\r\n return Promise.reject(err);\r\n }\r\n },\r\n );\r\n\r\n return {\r\n service,\r\n };\r\n};\r\n"],"names":["config","useLoginStore","isNumber","res","res401Interceptors","ElMessage","responseErrorMessage"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devProxy.js","sources":["../../../../../../packages/utils/src/http/devProxy.ts"],"sourcesContent":["import type { ProxyOptions } from 'vite';\n\nexport const giimeDevProxy: Record<string, string | ProxyOptions> = {\n // https://cn.vitejs.dev/config/#server-proxy\n '/gstore-api': {\n target: 'http://192.168.4.125:10086/gstore/',\n changeOrigin: true,\n rewrite: p => p.replace(/^\\/gstore-api/, ''),\n },\n '/material-api': {\n target: 'http://192.168.4.130:8002',\n changeOrigin: true,\n rewrite: p => p.replace(/^\\/material-api/, ''),\n },\n '/shop-admin-api': {\n target: 'http://192.168.4.130:8001',\n changeOrigin: true,\n rewrite: p => p.replace(/^\\/shop-admin-api/, ''),\n },\n '/gateway-api': {\n target: 'http://192.168.4.131:8082/',\n changeOrigin: true,\n rewrite: p => p.replace(/^\\/gateway-api/, ''),\n },\n '/third-api': {\n target: 'https://third-gw.giimall.net/',\n changeOrigin: true,\n rewrite: p => p.replace(/^\\/third-api/, ''),\n },\n '/basic-api': {\n target: 'http://192.168.4.171:9501/',\n changeOrigin: true,\n rewrite: p => p.replace(/^\\/basic-api/, ''),\n },\n '/amazon-agent-api': {\n target: 'http://192.168.4.125:10086/amazon-agent',\n changeOrigin: true,\n rewrite: p => p.replace(/^\\/amazon-agent-api/, ''),\n },\n '/product-center-api': {\n target: 'http://192.168.4.125:10086/product-center/',\n changeOrigin: true,\n rewrite: p => p.replace(/^\\/product-center-api/, ''),\n },\n '/guard-basic-api': {\n target: 'http://192.168.4.132/guard/',\n changeOrigin: true,\n rewrite: p => p.replace(/^\\/guard-basic-api/, ''),\n },\n};\n"],"names":[],"mappings":";;AAEO,MAAM,aAAuD,GAAA;AAAA;AAAA,EAElE,aAAe,EAAA;AAAA,IACb,MAAQ,EAAA,oCAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,iBAAiB,EAAE,CAAA;AAAA,GAC7C;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,MAAQ,EAAA,2BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,mBAAmB,EAAE,CAAA;AAAA,GAC/C;AAAA,EACA,iBAAmB,EAAA;AAAA,IACjB,MAAQ,EAAA,2BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,qBAAqB,EAAE,CAAA;AAAA,GACjD;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,4BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,kBAAkB,EAAE,CAAA;AAAA,GAC9C;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,+BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AAAA,GAC5C;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,4BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AAAA,GAC5C;AAAA,EACA,mBAAqB,EAAA;AAAA,IACnB,MAAQ,EAAA,yCAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,uBAAuB,EAAE,CAAA;AAAA,GACnD;AAAA,EACA,qBAAuB,EAAA;AAAA,IACrB,MAAQ,EAAA,4CAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,yBAAyB,EAAE,CAAA;AAAA,GACrD;AAAA,EACA,kBAAoB,EAAA;AAAA,IAClB,MAAQ,EAAA,6BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,sBAAsB,EAAE,CAAA;AAAA,GAClD;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"devProxy.js","sources":["../../../../../../packages/utils/src/http/devProxy.ts"],"sourcesContent":["import type { ProxyOptions } from 'vite';\r\n\r\nexport const giimeDevProxy: Record<string, string | ProxyOptions> = {\r\n // https://cn.vitejs.dev/config/#server-proxy\r\n '/gstore-api': {\r\n target: 'http://192.168.4.125:10086/gstore/',\r\n changeOrigin: true,\r\n rewrite: p => p.replace(/^\\/gstore-api/, ''),\r\n },\r\n '/material-api': {\r\n target: 'http://192.168.4.130:8002',\r\n changeOrigin: true,\r\n rewrite: p => p.replace(/^\\/material-api/, ''),\r\n },\r\n '/shop-admin-api': {\r\n target: 'http://192.168.4.130:8001',\r\n changeOrigin: true,\r\n rewrite: p => p.replace(/^\\/shop-admin-api/, ''),\r\n },\r\n '/gateway-api': {\r\n target: 'http://192.168.4.131:8082/',\r\n changeOrigin: true,\r\n rewrite: p => p.replace(/^\\/gateway-api/, ''),\r\n },\r\n '/third-api': {\r\n target: 'https://third-gw.giimall.net/',\r\n changeOrigin: true,\r\n rewrite: p => p.replace(/^\\/third-api/, ''),\r\n },\r\n '/basic-api': {\r\n target: 'http://192.168.4.171:9501/',\r\n changeOrigin: true,\r\n rewrite: p => p.replace(/^\\/basic-api/, ''),\r\n },\r\n '/amazon-agent-api': {\r\n target: 'http://192.168.4.125:10086/amazon-agent',\r\n changeOrigin: true,\r\n rewrite: p => p.replace(/^\\/amazon-agent-api/, ''),\r\n },\r\n '/product-center-api': {\r\n target: 'http://192.168.4.125:10086/product-center/',\r\n changeOrigin: true,\r\n rewrite: p => p.replace(/^\\/product-center-api/, ''),\r\n },\r\n '/guard-basic-api': {\r\n target: 'http://192.168.4.132/guard/',\r\n changeOrigin: true,\r\n rewrite: p => p.replace(/^\\/guard-basic-api/, ''),\r\n },\r\n};\r\n"],"names":[],"mappings":";;AAEO,MAAM,aAAuD,GAAA;AAAA;AAAA,EAElE,aAAe,EAAA;AAAA,IACb,MAAQ,EAAA,oCAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,iBAAiB,EAAE,CAAA;AAAA,GAC7C;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,MAAQ,EAAA,2BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,mBAAmB,EAAE,CAAA;AAAA,GAC/C;AAAA,EACA,iBAAmB,EAAA;AAAA,IACjB,MAAQ,EAAA,2BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,qBAAqB,EAAE,CAAA;AAAA,GACjD;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,4BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,kBAAkB,EAAE,CAAA;AAAA,GAC9C;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,+BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AAAA,GAC5C;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,4BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AAAA,GAC5C;AAAA,EACA,mBAAqB,EAAA;AAAA,IACnB,MAAQ,EAAA,yCAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,uBAAuB,EAAE,CAAA;AAAA,GACnD;AAAA,EACA,qBAAuB,EAAA;AAAA,IACrB,MAAQ,EAAA,4CAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,yBAAyB,EAAE,CAAA;AAAA,GACrD;AAAA,EACA,kBAAoB,EAAA;AAAA,IAClB,MAAQ,EAAA,6BAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,sBAAsB,EAAE,CAAA;AAAA,GAClD;AACF;;;;"}
|
package/package.json
CHANGED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { GetOssAccessTokenResponseData } from '../../../api/materialApi';
|
|
2
|
-
/**
|
|
3
|
-
* @description 素材上传权限
|
|
4
|
-
* @param {*}
|
|
5
|
-
* @return {*}
|
|
6
|
-
**/
|
|
7
|
-
export declare const useAliossStsTokenStore: import("pinia").StoreDefinition<"gmAliossStsToken", import("pinia")._UnwrapAll<Pick<{
|
|
8
|
-
isLoading: import("vue").Ref<boolean>;
|
|
9
|
-
getAliossStsTokenAsync: () => Promise<GetOssAccessTokenResponseData>;
|
|
10
|
-
}, "isLoading">>, Pick<{
|
|
11
|
-
isLoading: import("vue").Ref<boolean>;
|
|
12
|
-
getAliossStsTokenAsync: () => Promise<GetOssAccessTokenResponseData>;
|
|
13
|
-
}, never>, Pick<{
|
|
14
|
-
isLoading: import("vue").Ref<boolean>;
|
|
15
|
-
getAliossStsTokenAsync: () => Promise<GetOssAccessTokenResponseData>;
|
|
16
|
-
}, "getAliossStsTokenAsync">>;
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { ref } from 'vue';
|
|
2
|
-
import { defineStore } from 'pinia';
|
|
3
|
-
import '../../../api/materialApi/index.mjs';
|
|
4
|
-
import { createEventHook } from '@vueuse/core';
|
|
5
|
-
import Cookies from 'js-cookie';
|
|
6
|
-
import { getOssAccessToken } from '../../../api/materialApi/cross/getOssAccessToken.mjs';
|
|
7
|
-
|
|
8
|
-
const useAliossStsTokenStore = defineStore("gmAliossStsToken", () => {
|
|
9
|
-
const isLoading = ref(false);
|
|
10
|
-
const aliossStsTokenResult = createEventHook();
|
|
11
|
-
const setCookie = (data) => {
|
|
12
|
-
if (!data)
|
|
13
|
-
return;
|
|
14
|
-
const { Expiration } = data;
|
|
15
|
-
const time = new Date(new Date(Expiration ?? 0).getTime() - 1e4);
|
|
16
|
-
Cookies.set("aliossStsToken", JSON.stringify(data), { expires: time });
|
|
17
|
-
};
|
|
18
|
-
const getAliossStsToken = async () => {
|
|
19
|
-
const aliossStsToken = Cookies.get("aliossStsToken");
|
|
20
|
-
if (aliossStsToken) {
|
|
21
|
-
return JSON.parse(aliossStsToken);
|
|
22
|
-
}
|
|
23
|
-
isLoading.value = true;
|
|
24
|
-
try {
|
|
25
|
-
const { data } = await getOssAccessToken();
|
|
26
|
-
if (data.code === 0) {
|
|
27
|
-
setCookie(data.data);
|
|
28
|
-
aliossStsTokenResult.trigger(data.data);
|
|
29
|
-
}
|
|
30
|
-
return data.data;
|
|
31
|
-
} finally {
|
|
32
|
-
isLoading.value = false;
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
const onAliossStsTokenPromise = () => {
|
|
36
|
-
return new Promise((resolve) => {
|
|
37
|
-
aliossStsTokenResult.on((value) => resolve(value));
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
const getAliossStsTokenAsync = () => {
|
|
41
|
-
if (isLoading.value) {
|
|
42
|
-
return onAliossStsTokenPromise();
|
|
43
|
-
}
|
|
44
|
-
return getAliossStsToken();
|
|
45
|
-
};
|
|
46
|
-
return {
|
|
47
|
-
isLoading,
|
|
48
|
-
getAliossStsTokenAsync
|
|
49
|
-
};
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
export { useAliossStsTokenStore };
|
|
53
|
-
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/store/useAliossStsToken/index.ts"],"sourcesContent":["import { ref } from 'vue';\r\nimport { defineStore } from 'pinia';\r\nimport { getOssAccessToken } from '@giime/api/materialApi';\r\nimport { createEventHook } from '@vueuse/core';\r\nimport Cookies from 'js-cookie';\r\nimport type { GetOssAccessTokenResponseData } from '@giime/api/materialApi';\r\n\r\n/**\r\n * @description 素材上传权限\r\n * @param {*}\r\n * @return {*}\r\n **/\r\n\r\nexport const useAliossStsTokenStore = defineStore('gmAliossStsToken', () => {\r\n const isLoading = ref(false);\r\n const aliossStsTokenResult = createEventHook<GetOssAccessTokenResponseData>();\r\n\r\n const setCookie = (data: GetOssAccessTokenResponseData) => {\r\n if (!data) return;\r\n const { Expiration } = data;\r\n const time = new Date(new Date(Expiration ?? 0).getTime() - 10000); //-10秒作为缓冲\r\n Cookies.set('aliossStsToken', JSON.stringify(data), { expires: time });\r\n };\r\n\r\n /* 请求临时上传权限 */\r\n const getAliossStsToken = async () => {\r\n const aliossStsToken = Cookies.get('aliossStsToken');\r\n if (aliossStsToken) {\r\n return JSON.parse(aliossStsToken) as GetOssAccessTokenResponseData;\r\n }\r\n isLoading.value = true;\r\n try {\r\n const { data } = await getOssAccessToken();\r\n if (data.code === 0) {\r\n setCookie(data.data);\r\n aliossStsTokenResult.trigger(data.data);\r\n }\r\n\r\n return data.data;\r\n } finally {\r\n isLoading.value = false;\r\n }\r\n };\r\n\r\n /* 监听获取 alioss sts token 成功 promise版 */\r\n const onAliossStsTokenPromise = () => {\r\n return new Promise<GetOssAccessTokenResponseData>(resolve => {\r\n aliossStsTokenResult.on(value => resolve(value));\r\n });\r\n };\r\n\r\n /* 获取 alioss 临时上传 token*/\r\n const getAliossStsTokenAsync = () => {\r\n /* 若正在请求请求临时token接口 则其他后进来的等待 */\r\n if (isLoading.value) {\r\n return onAliossStsTokenPromise();\r\n }\r\n return getAliossStsToken();\r\n };\r\n\r\n return {\r\n isLoading,\r\n getAliossStsTokenAsync,\r\n };\r\n});\r\n"],"names":[],"mappings":";;;;;;;AAaa,MAAA,sBAAA,GAAyB,WAAY,CAAA,kBAAA,EAAoB,MAAM;AAC1E,EAAM,MAAA,SAAA,GAAY,IAAI,KAAK,CAAA,CAAA;AAC3B,EAAA,MAAM,uBAAuB,eAA+C,EAAA,CAAA;AAE5E,EAAM,MAAA,SAAA,GAAY,CAAC,IAAwC,KAAA;AACzD,IAAA,IAAI,CAAC,IAAA;AAAM,MAAA,OAAA;AACX,IAAM,MAAA,EAAE,YAAe,GAAA,IAAA,CAAA;AACvB,IAAM,MAAA,IAAA,GAAO,IAAI,IAAA,CAAK,IAAI,IAAA,CAAK,cAAc,CAAC,CAAA,CAAE,OAAQ,EAAA,GAAI,GAAK,CAAA,CAAA;AACjE,IAAQ,OAAA,CAAA,GAAA,CAAI,kBAAkB,IAAK,CAAA,SAAA,CAAU,IAAI,CAAG,EAAA,EAAE,OAAS,EAAA,IAAA,EAAM,CAAA,CAAA;AAAA,GACvE,CAAA;AAGA,EAAA,MAAM,oBAAoB,YAAY;AACpC,IAAM,MAAA,cAAA,GAAiB,OAAQ,CAAA,GAAA,CAAI,gBAAgB,CAAA,CAAA;AACnD,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAO,OAAA,IAAA,CAAK,MAAM,cAAc,CAAA,CAAA;AAAA,KAClC;AACA,IAAA,SAAA,CAAU,KAAQ,GAAA,IAAA,CAAA;AAClB,IAAI,IAAA;AACF,MAAA,MAAM,EAAE,IAAA,EAAS,GAAA,MAAM,iBAAkB,EAAA,CAAA;AACzC,MAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,QAAA,SAAA,CAAU,KAAK,IAAI,CAAA,CAAA;AACnB,QAAqB,oBAAA,CAAA,OAAA,CAAQ,KAAK,IAAI,CAAA,CAAA;AAAA,OACxC;AAEA,MAAA,OAAO,IAAK,CAAA,IAAA,CAAA;AAAA,KACZ,SAAA;AACA,MAAA,SAAA,CAAU,KAAQ,GAAA,KAAA,CAAA;AAAA,KACpB;AAAA,GACF,CAAA;AAGA,EAAA,MAAM,0BAA0B,MAAM;AACpC,IAAO,OAAA,IAAI,QAAuC,CAAW,OAAA,KAAA;AAC3D,MAAA,oBAAA,CAAqB,EAAG,CAAA,CAAA,KAAA,KAAS,OAAQ,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,KAChD,CAAA,CAAA;AAAA,GACH,CAAA;AAGA,EAAA,MAAM,yBAAyB,MAAM;AAEnC,IAAA,IAAI,UAAU,KAAO,EAAA;AACnB,MAAA,OAAO,uBAAwB,EAAA,CAAA;AAAA,KACjC;AACA,IAAA,OAAO,iBAAkB,EAAA,CAAA;AAAA,GAC3B,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,sBAAA;AAAA,GACF,CAAA;AACF,CAAC;;;;"}
|
package/es/utils/src/alioss.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/** 上传文件到阿里云 */
|
|
2
|
-
export type AliOssParams = {
|
|
3
|
-
/** 资源文件 */
|
|
4
|
-
file: File;
|
|
5
|
-
/** 文件名 */
|
|
6
|
-
fileName?: string;
|
|
7
|
-
/** 文件存储位置 */
|
|
8
|
-
seat?: string;
|
|
9
|
-
/** 上传到oss的设置 */
|
|
10
|
-
options?: any;
|
|
11
|
-
};
|
|
12
|
-
/** 返回数据 */
|
|
13
|
-
export type AliOssResponse = {
|
|
14
|
-
/** 文件地址 */
|
|
15
|
-
url: string;
|
|
16
|
-
/** 文件名 */
|
|
17
|
-
name: string;
|
|
18
|
-
/** 文件最后修改时间 */
|
|
19
|
-
lastModified: number;
|
|
20
|
-
/** 文件md5 */
|
|
21
|
-
md5: string;
|
|
22
|
-
/** 文件大小 */
|
|
23
|
-
size: number;
|
|
24
|
-
/** 文件后缀 */
|
|
25
|
-
type: string;
|
|
26
|
-
/** 文件库是否存在 */
|
|
27
|
-
isExist: boolean;
|
|
28
|
-
};
|
|
29
|
-
/** 检测广告素材是否已存在 */
|
|
30
|
-
export declare const getFileExist: (md5Code: string, ext: string) => Promise<string | false>;
|
|
31
|
-
/** 上传文件 */
|
|
32
|
-
export declare const aliossPutFile: ({ file, fileName, seat, options }: AliOssParams) => Promise<AliOssResponse>;
|
package/es/utils/src/alioss.mjs
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import AliOss from 'ali-oss';
|
|
2
|
-
import { useAliossStsTokenStore } from '../../hooks/store/useAliossStsToken/index.mjs';
|
|
3
|
-
import '../../api/materialApi/index.mjs';
|
|
4
|
-
import { GmMessage } from '../../components/src/plugins/message/index.mjs';
|
|
5
|
-
import { ts_md5_file } from './crypto/md5.mjs';
|
|
6
|
-
import { getAdFileExist } from '../../api/materialApi/cross/getAdFileExist.mjs';
|
|
7
|
-
|
|
8
|
-
const getParallelPartSize = (size) => {
|
|
9
|
-
const SM = size / 1024 / 1024;
|
|
10
|
-
let parallel = 1;
|
|
11
|
-
let partSize = 1024 * 1024;
|
|
12
|
-
if (SM <= 5) {
|
|
13
|
-
partSize *= 5;
|
|
14
|
-
}
|
|
15
|
-
if (SM > 5 && SM <= 10) {
|
|
16
|
-
parallel = 2;
|
|
17
|
-
partSize *= 4;
|
|
18
|
-
}
|
|
19
|
-
if (SM > 10 && SM <= 30) {
|
|
20
|
-
parallel = 4;
|
|
21
|
-
partSize *= 5;
|
|
22
|
-
}
|
|
23
|
-
if (SM > 30 && SM <= 50) {
|
|
24
|
-
parallel = 6;
|
|
25
|
-
partSize *= 6;
|
|
26
|
-
}
|
|
27
|
-
if (SM > 50) {
|
|
28
|
-
parallel = 8;
|
|
29
|
-
partSize *= 8;
|
|
30
|
-
}
|
|
31
|
-
return {
|
|
32
|
-
parallel,
|
|
33
|
-
partSize
|
|
34
|
-
};
|
|
35
|
-
};
|
|
36
|
-
const getFileExist = async (md5Code, ext) => {
|
|
37
|
-
const { data } = await getAdFileExist({ md5Code, ext });
|
|
38
|
-
if (data.code !== 0) {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
if (!data.data.count) {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
return data.data.url;
|
|
45
|
-
};
|
|
46
|
-
const aliossPutFile = async ({ file, fileName, seat, options }) => {
|
|
47
|
-
const md5 = await ts_md5_file(file);
|
|
48
|
-
let { name, lastModified, size } = file;
|
|
49
|
-
const ext = name.match(/\.(\w+)$/)?.[0] || "";
|
|
50
|
-
const url = await getFileExist(md5, ext.replaceAll(".", ""));
|
|
51
|
-
name = (fileName || name).slice(0, name.lastIndexOf("."));
|
|
52
|
-
if (url) {
|
|
53
|
-
return {
|
|
54
|
-
name: name + ext,
|
|
55
|
-
url,
|
|
56
|
-
lastModified,
|
|
57
|
-
md5,
|
|
58
|
-
size,
|
|
59
|
-
type: ext.replaceAll(".", ""),
|
|
60
|
-
isExist: true
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
const aliossStsTokenStore = useAliossStsTokenStore();
|
|
64
|
-
const { AccessKeyId, AccessKeySecret, SecurityToken } = await aliossStsTokenStore.getAliossStsTokenAsync();
|
|
65
|
-
const timestr = Date.now();
|
|
66
|
-
const aliossPath = `material/${seat}/material-file-${timestr}-${size}-${lastModified}${ext}`;
|
|
67
|
-
if (!options) {
|
|
68
|
-
const { parallel, partSize } = getParallelPartSize(size);
|
|
69
|
-
options = options ?? {
|
|
70
|
-
parallel,
|
|
71
|
-
partSize,
|
|
72
|
-
ContentDisposition: `attachment;filename=${encodeURIComponent(name)}${ext};filename*=${encodeURIComponent(name)}${ext}`
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
const ossClient = new AliOss({
|
|
76
|
-
// yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
|
|
77
|
-
region: "oss-cn-shenzhen",
|
|
78
|
-
// 从STS服务获取的临时访问密钥(AccessKey ID、AccessKey Secret、StsToken)。
|
|
79
|
-
accessKeyId: AccessKeyId,
|
|
80
|
-
accessKeySecret: AccessKeySecret,
|
|
81
|
-
stsToken: SecurityToken,
|
|
82
|
-
// 刷新临时访问凭证的时间间隔,单位为毫秒。
|
|
83
|
-
refreshSTSTokenInterval: 3e5,
|
|
84
|
-
// 填写Bucket名称。
|
|
85
|
-
bucket: "giikin-material"
|
|
86
|
-
});
|
|
87
|
-
return new Promise((resolve, reject) => {
|
|
88
|
-
try {
|
|
89
|
-
const upload = options.parallel === 1 ? "put" : "multipartUpload";
|
|
90
|
-
ossClient[upload](aliossPath, file, options).then(() => {
|
|
91
|
-
const url2 = `https://sucai.giikin.cn/${aliossPath}`;
|
|
92
|
-
resolve({
|
|
93
|
-
name: name + ext,
|
|
94
|
-
url: url2,
|
|
95
|
-
lastModified,
|
|
96
|
-
md5,
|
|
97
|
-
type: ext.replaceAll(".", ""),
|
|
98
|
-
size,
|
|
99
|
-
isExist: false
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
} catch (error) {
|
|
103
|
-
GmMessage.error(error || "\u4E0A\u4F20\u5931\u8D25");
|
|
104
|
-
reject(error);
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
export { aliossPutFile, getFileExist };
|
|
110
|
-
//# sourceMappingURL=alioss.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alioss.mjs","sources":["../../../../../packages/utils/src/alioss.ts"],"sourcesContent":["import AliOss from 'ali-oss';\r\nimport { useAliossStsTokenStore } from '@giime/hooks/store/useAliossStsToken';\r\nimport { getAdFileExist } from '@giime/api/materialApi';\r\nimport { GmMessage } from '@giime/components/src/plugins/message';\r\nimport { ts_md5_file } from './crypto/md5';\r\n\r\n/** 上传文件到阿里云 */\r\nexport type AliOssParams = {\r\n /** 资源文件 */\r\n file: File;\r\n /** 文件名 */\r\n fileName?: string;\r\n /** 文件存储位置 */\r\n seat?: string;\r\n /** 上传到oss的设置 */\r\n options?: any;\r\n};\r\n\r\n/** 返回数据 */\r\nexport type AliOssResponse = {\r\n /** 文件地址 */\r\n url: string;\r\n /** 文件名 */\r\n name: string;\r\n /** 文件最后修改时间 */\r\n lastModified: number;\r\n /** 文件md5 */\r\n md5: string;\r\n /** 文件大小 */\r\n size: number;\r\n /** 文件后缀 */\r\n type: string;\r\n /** 文件库是否存在 */\r\n isExist: boolean;\r\n};\r\n\r\n/** 文件分片 */\r\nconst getParallelPartSize = (size: number) => {\r\n const SM = size / 1024 / 1024;\r\n let parallel = 1;\r\n let partSize = 1024 * 1024;\r\n if (SM <= 5) {\r\n partSize *= 5;\r\n }\r\n if (SM > 5 && SM <= 10) {\r\n parallel = 2;\r\n partSize *= 4;\r\n }\r\n if (SM > 10 && SM <= 30) {\r\n parallel = 4;\r\n partSize *= 5;\r\n }\r\n if (SM > 30 && SM <= 50) {\r\n parallel = 6;\r\n partSize *= 6;\r\n }\r\n if (SM > 50) {\r\n parallel = 8;\r\n partSize *= 8;\r\n }\r\n\r\n return {\r\n parallel,\r\n partSize,\r\n };\r\n};\r\n\r\n/** 检测广告素材是否已存在 */\r\nexport const getFileExist = async (md5Code: string, ext: string) => {\r\n const { data } = await getAdFileExist({ md5Code, ext });\r\n if (data.code !== 0) {\r\n return false;\r\n }\r\n if (!data.data.count) {\r\n return false;\r\n }\r\n return data.data.url;\r\n};\r\n\r\n/** 上传文件 */\r\nexport const aliossPutFile = async ({ file, fileName, seat, options }: AliOssParams): Promise<AliOssResponse> => {\r\n const md5 = await ts_md5_file(file);\r\n let { name, lastModified, size } = file;\r\n // 截取文件后缀名\r\n const ext = name.match(/\\.(\\w+)$/)?.[0] || '';\r\n const url = await getFileExist(md5, ext.replaceAll('.', ''));\r\n name = (fileName || name).slice(0, name.lastIndexOf('.'));\r\n // 文件已存在直接返回路径\r\n if (url) {\r\n return {\r\n name: name + ext,\r\n url,\r\n lastModified,\r\n md5,\r\n size,\r\n type: ext.replaceAll('.', ''),\r\n isExist: true,\r\n };\r\n }\r\n // 阿里上传权限\r\n const aliossStsTokenStore = useAliossStsTokenStore();\r\n const { AccessKeyId, AccessKeySecret, SecurityToken } = await aliossStsTokenStore.getAliossStsTokenAsync();\r\n\r\n // 文件存储路径\r\n const timestr = Date.now();\r\n const aliossPath = `material/${seat}/material-file-${timestr}-${size}-${lastModified}${ext}`;\r\n\r\n // 根据文件大小设置并发数和分片大小\r\n if (!options) {\r\n const { parallel, partSize } = getParallelPartSize(size);\r\n options = options ?? {\r\n parallel,\r\n partSize,\r\n ContentDisposition: `attachment;filename=${encodeURIComponent(name)}${ext};filename*=${encodeURIComponent(name)}${ext}`,\r\n };\r\n }\r\n\r\n const ossClient = new AliOss({\r\n // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。\r\n region: 'oss-cn-shenzhen',\r\n // 从STS服务获取的临时访问密钥(AccessKey ID、AccessKey Secret、StsToken)。\r\n accessKeyId: AccessKeyId,\r\n accessKeySecret: AccessKeySecret,\r\n stsToken: SecurityToken,\r\n // 刷新临时访问凭证的时间间隔,单位为毫秒。\r\n refreshSTSTokenInterval: 300000,\r\n // 填写Bucket名称。\r\n bucket: 'giikin-material',\r\n });\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // 分片数量大于1,使用 multipartUpload 方法\r\n const upload = options.parallel === 1 ? 'put' : 'multipartUpload';\r\n ossClient[upload](aliossPath, file, options).then(() => {\r\n const url = `https://sucai.giikin.cn/${aliossPath}`;\r\n resolve({\r\n name: name + ext,\r\n url,\r\n lastModified,\r\n md5,\r\n type: ext.replaceAll('.', ''),\r\n size,\r\n isExist: false,\r\n });\r\n });\r\n } catch (error) {\r\n GmMessage.error(error || '上传失败');\r\n reject(error);\r\n }\r\n });\r\n};\r\n"],"names":["url"],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { GetOssAccessTokenResponseData } from '../../../api/materialApi';
|
|
2
|
-
/**
|
|
3
|
-
* @description 素材上传权限
|
|
4
|
-
* @param {*}
|
|
5
|
-
* @return {*}
|
|
6
|
-
**/
|
|
7
|
-
export declare const useAliossStsTokenStore: import("pinia").StoreDefinition<"gmAliossStsToken", import("pinia")._UnwrapAll<Pick<{
|
|
8
|
-
isLoading: import("vue").Ref<boolean>;
|
|
9
|
-
getAliossStsTokenAsync: () => Promise<GetOssAccessTokenResponseData>;
|
|
10
|
-
}, "isLoading">>, Pick<{
|
|
11
|
-
isLoading: import("vue").Ref<boolean>;
|
|
12
|
-
getAliossStsTokenAsync: () => Promise<GetOssAccessTokenResponseData>;
|
|
13
|
-
}, never>, Pick<{
|
|
14
|
-
isLoading: import("vue").Ref<boolean>;
|
|
15
|
-
getAliossStsTokenAsync: () => Promise<GetOssAccessTokenResponseData>;
|
|
16
|
-
}, "getAliossStsTokenAsync">>;
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vue = require('vue');
|
|
4
|
-
var pinia = require('pinia');
|
|
5
|
-
require('../../../api/materialApi/index.js');
|
|
6
|
-
var core = require('@vueuse/core');
|
|
7
|
-
var Cookies = require('js-cookie');
|
|
8
|
-
var getOssAccessToken = require('../../../api/materialApi/cross/getOssAccessToken.js');
|
|
9
|
-
|
|
10
|
-
const useAliossStsTokenStore = pinia.defineStore("gmAliossStsToken", () => {
|
|
11
|
-
const isLoading = vue.ref(false);
|
|
12
|
-
const aliossStsTokenResult = core.createEventHook();
|
|
13
|
-
const setCookie = (data) => {
|
|
14
|
-
if (!data)
|
|
15
|
-
return;
|
|
16
|
-
const { Expiration } = data;
|
|
17
|
-
const time = new Date(new Date(Expiration ?? 0).getTime() - 1e4);
|
|
18
|
-
Cookies.set("aliossStsToken", JSON.stringify(data), { expires: time });
|
|
19
|
-
};
|
|
20
|
-
const getAliossStsToken = async () => {
|
|
21
|
-
const aliossStsToken = Cookies.get("aliossStsToken");
|
|
22
|
-
if (aliossStsToken) {
|
|
23
|
-
return JSON.parse(aliossStsToken);
|
|
24
|
-
}
|
|
25
|
-
isLoading.value = true;
|
|
26
|
-
try {
|
|
27
|
-
const { data } = await getOssAccessToken.getOssAccessToken();
|
|
28
|
-
if (data.code === 0) {
|
|
29
|
-
setCookie(data.data);
|
|
30
|
-
aliossStsTokenResult.trigger(data.data);
|
|
31
|
-
}
|
|
32
|
-
return data.data;
|
|
33
|
-
} finally {
|
|
34
|
-
isLoading.value = false;
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
const onAliossStsTokenPromise = () => {
|
|
38
|
-
return new Promise((resolve) => {
|
|
39
|
-
aliossStsTokenResult.on((value) => resolve(value));
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
|
-
const getAliossStsTokenAsync = () => {
|
|
43
|
-
if (isLoading.value) {
|
|
44
|
-
return onAliossStsTokenPromise();
|
|
45
|
-
}
|
|
46
|
-
return getAliossStsToken();
|
|
47
|
-
};
|
|
48
|
-
return {
|
|
49
|
-
isLoading,
|
|
50
|
-
getAliossStsTokenAsync
|
|
51
|
-
};
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
exports.useAliossStsTokenStore = useAliossStsTokenStore;
|
|
55
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../packages/hooks/store/useAliossStsToken/index.ts"],"sourcesContent":["import { ref } from 'vue';\r\nimport { defineStore } from 'pinia';\r\nimport { getOssAccessToken } from '@giime/api/materialApi';\r\nimport { createEventHook } from '@vueuse/core';\r\nimport Cookies from 'js-cookie';\r\nimport type { GetOssAccessTokenResponseData } from '@giime/api/materialApi';\r\n\r\n/**\r\n * @description 素材上传权限\r\n * @param {*}\r\n * @return {*}\r\n **/\r\n\r\nexport const useAliossStsTokenStore = defineStore('gmAliossStsToken', () => {\r\n const isLoading = ref(false);\r\n const aliossStsTokenResult = createEventHook<GetOssAccessTokenResponseData>();\r\n\r\n const setCookie = (data: GetOssAccessTokenResponseData) => {\r\n if (!data) return;\r\n const { Expiration } = data;\r\n const time = new Date(new Date(Expiration ?? 0).getTime() - 10000); //-10秒作为缓冲\r\n Cookies.set('aliossStsToken', JSON.stringify(data), { expires: time });\r\n };\r\n\r\n /* 请求临时上传权限 */\r\n const getAliossStsToken = async () => {\r\n const aliossStsToken = Cookies.get('aliossStsToken');\r\n if (aliossStsToken) {\r\n return JSON.parse(aliossStsToken) as GetOssAccessTokenResponseData;\r\n }\r\n isLoading.value = true;\r\n try {\r\n const { data } = await getOssAccessToken();\r\n if (data.code === 0) {\r\n setCookie(data.data);\r\n aliossStsTokenResult.trigger(data.data);\r\n }\r\n\r\n return data.data;\r\n } finally {\r\n isLoading.value = false;\r\n }\r\n };\r\n\r\n /* 监听获取 alioss sts token 成功 promise版 */\r\n const onAliossStsTokenPromise = () => {\r\n return new Promise<GetOssAccessTokenResponseData>(resolve => {\r\n aliossStsTokenResult.on(value => resolve(value));\r\n });\r\n };\r\n\r\n /* 获取 alioss 临时上传 token*/\r\n const getAliossStsTokenAsync = () => {\r\n /* 若正在请求请求临时token接口 则其他后进来的等待 */\r\n if (isLoading.value) {\r\n return onAliossStsTokenPromise();\r\n }\r\n return getAliossStsToken();\r\n };\r\n\r\n return {\r\n isLoading,\r\n getAliossStsTokenAsync,\r\n };\r\n});\r\n"],"names":["defineStore","ref","createEventHook","getOssAccessToken"],"mappings":";;;;;;;;;AAaa,MAAA,sBAAA,GAAyBA,iBAAY,CAAA,kBAAA,EAAoB,MAAM;AAC1E,EAAM,MAAA,SAAA,GAAYC,QAAI,KAAK,CAAA,CAAA;AAC3B,EAAA,MAAM,uBAAuBC,oBAA+C,EAAA,CAAA;AAE5E,EAAM,MAAA,SAAA,GAAY,CAAC,IAAwC,KAAA;AACzD,IAAA,IAAI,CAAC,IAAA;AAAM,MAAA,OAAA;AACX,IAAM,MAAA,EAAE,YAAe,GAAA,IAAA,CAAA;AACvB,IAAM,MAAA,IAAA,GAAO,IAAI,IAAA,CAAK,IAAI,IAAA,CAAK,cAAc,CAAC,CAAA,CAAE,OAAQ,EAAA,GAAI,GAAK,CAAA,CAAA;AACjE,IAAQ,OAAA,CAAA,GAAA,CAAI,kBAAkB,IAAK,CAAA,SAAA,CAAU,IAAI,CAAG,EAAA,EAAE,OAAS,EAAA,IAAA,EAAM,CAAA,CAAA;AAAA,GACvE,CAAA;AAGA,EAAA,MAAM,oBAAoB,YAAY;AACpC,IAAM,MAAA,cAAA,GAAiB,OAAQ,CAAA,GAAA,CAAI,gBAAgB,CAAA,CAAA;AACnD,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAO,OAAA,IAAA,CAAK,MAAM,cAAc,CAAA,CAAA;AAAA,KAClC;AACA,IAAA,SAAA,CAAU,KAAQ,GAAA,IAAA,CAAA;AAClB,IAAI,IAAA;AACF,MAAA,MAAM,EAAE,IAAA,EAAS,GAAA,MAAMC,mCAAkB,EAAA,CAAA;AACzC,MAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,QAAA,SAAA,CAAU,KAAK,IAAI,CAAA,CAAA;AACnB,QAAqB,oBAAA,CAAA,OAAA,CAAQ,KAAK,IAAI,CAAA,CAAA;AAAA,OACxC;AAEA,MAAA,OAAO,IAAK,CAAA,IAAA,CAAA;AAAA,KACZ,SAAA;AACA,MAAA,SAAA,CAAU,KAAQ,GAAA,KAAA,CAAA;AAAA,KACpB;AAAA,GACF,CAAA;AAGA,EAAA,MAAM,0BAA0B,MAAM;AACpC,IAAO,OAAA,IAAI,QAAuC,CAAW,OAAA,KAAA;AAC3D,MAAA,oBAAA,CAAqB,EAAG,CAAA,CAAA,KAAA,KAAS,OAAQ,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,KAChD,CAAA,CAAA;AAAA,GACH,CAAA;AAGA,EAAA,MAAM,yBAAyB,MAAM;AAEnC,IAAA,IAAI,UAAU,KAAO,EAAA;AACnB,MAAA,OAAO,uBAAwB,EAAA,CAAA;AAAA,KACjC;AACA,IAAA,OAAO,iBAAkB,EAAA,CAAA;AAAA,GAC3B,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,sBAAA;AAAA,GACF,CAAA;AACF,CAAC;;;;"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/** 上传文件到阿里云 */
|
|
2
|
-
export type AliOssParams = {
|
|
3
|
-
/** 资源文件 */
|
|
4
|
-
file: File;
|
|
5
|
-
/** 文件名 */
|
|
6
|
-
fileName?: string;
|
|
7
|
-
/** 文件存储位置 */
|
|
8
|
-
seat?: string;
|
|
9
|
-
/** 上传到oss的设置 */
|
|
10
|
-
options?: any;
|
|
11
|
-
};
|
|
12
|
-
/** 返回数据 */
|
|
13
|
-
export type AliOssResponse = {
|
|
14
|
-
/** 文件地址 */
|
|
15
|
-
url: string;
|
|
16
|
-
/** 文件名 */
|
|
17
|
-
name: string;
|
|
18
|
-
/** 文件最后修改时间 */
|
|
19
|
-
lastModified: number;
|
|
20
|
-
/** 文件md5 */
|
|
21
|
-
md5: string;
|
|
22
|
-
/** 文件大小 */
|
|
23
|
-
size: number;
|
|
24
|
-
/** 文件后缀 */
|
|
25
|
-
type: string;
|
|
26
|
-
/** 文件库是否存在 */
|
|
27
|
-
isExist: boolean;
|
|
28
|
-
};
|
|
29
|
-
/** 检测广告素材是否已存在 */
|
|
30
|
-
export declare const getFileExist: (md5Code: string, ext: string) => Promise<string | false>;
|
|
31
|
-
/** 上传文件 */
|
|
32
|
-
export declare const aliossPutFile: ({ file, fileName, seat, options }: AliOssParams) => Promise<AliOssResponse>;
|