giime 0.6.0-dev.1 → 0.6.0-dev.2
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 +50 -36
- 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 +50 -36
- 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 +50 -36
- 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
package/lib/utils/src/alioss.js
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var AliOss = require('ali-oss');
|
|
4
|
-
var index = require('../../hooks/store/useAliossStsToken/index.js');
|
|
5
|
-
require('../../api/materialApi/index.js');
|
|
6
|
-
var index$1 = require('../../components/src/plugins/message/index.js');
|
|
7
|
-
var md5 = require('./crypto/md5.js');
|
|
8
|
-
var getAdFileExist = require('../../api/materialApi/cross/getAdFileExist.js');
|
|
9
|
-
|
|
10
|
-
const getParallelPartSize = (size) => {
|
|
11
|
-
const SM = size / 1024 / 1024;
|
|
12
|
-
let parallel = 1;
|
|
13
|
-
let partSize = 1024 * 1024;
|
|
14
|
-
if (SM <= 5) {
|
|
15
|
-
partSize *= 5;
|
|
16
|
-
}
|
|
17
|
-
if (SM > 5 && SM <= 10) {
|
|
18
|
-
parallel = 2;
|
|
19
|
-
partSize *= 4;
|
|
20
|
-
}
|
|
21
|
-
if (SM > 10 && SM <= 30) {
|
|
22
|
-
parallel = 4;
|
|
23
|
-
partSize *= 5;
|
|
24
|
-
}
|
|
25
|
-
if (SM > 30 && SM <= 50) {
|
|
26
|
-
parallel = 6;
|
|
27
|
-
partSize *= 6;
|
|
28
|
-
}
|
|
29
|
-
if (SM > 50) {
|
|
30
|
-
parallel = 8;
|
|
31
|
-
partSize *= 8;
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
parallel,
|
|
35
|
-
partSize
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
const getFileExist = async (md5Code, ext) => {
|
|
39
|
-
const { data } = await getAdFileExist.getAdFileExist({ md5Code, ext });
|
|
40
|
-
if (data.code !== 0) {
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
if (!data.data.count) {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
return data.data.url;
|
|
47
|
-
};
|
|
48
|
-
const aliossPutFile = async ({ file, fileName, seat, options }) => {
|
|
49
|
-
const md5$1 = await md5.ts_md5_file(file);
|
|
50
|
-
let { name, lastModified, size } = file;
|
|
51
|
-
const ext = name.match(/\.(\w+)$/)?.[0] || "";
|
|
52
|
-
const url = await getFileExist(md5$1, ext.replaceAll(".", ""));
|
|
53
|
-
name = (fileName || name).slice(0, name.lastIndexOf("."));
|
|
54
|
-
if (url) {
|
|
55
|
-
return {
|
|
56
|
-
name: name + ext,
|
|
57
|
-
url,
|
|
58
|
-
lastModified,
|
|
59
|
-
md5: md5$1,
|
|
60
|
-
size,
|
|
61
|
-
type: ext.replaceAll(".", ""),
|
|
62
|
-
isExist: true
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
const aliossStsTokenStore = index.useAliossStsTokenStore();
|
|
66
|
-
const { AccessKeyId, AccessKeySecret, SecurityToken } = await aliossStsTokenStore.getAliossStsTokenAsync();
|
|
67
|
-
const timestr = Date.now();
|
|
68
|
-
const aliossPath = `material/${seat}/material-file-${timestr}-${size}-${lastModified}${ext}`;
|
|
69
|
-
if (!options) {
|
|
70
|
-
const { parallel, partSize } = getParallelPartSize(size);
|
|
71
|
-
options = options ?? {
|
|
72
|
-
parallel,
|
|
73
|
-
partSize,
|
|
74
|
-
ContentDisposition: `attachment;filename=${encodeURIComponent(name)}${ext};filename*=${encodeURIComponent(name)}${ext}`
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
const ossClient = new AliOss({
|
|
78
|
-
// yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
|
|
79
|
-
region: "oss-cn-shenzhen",
|
|
80
|
-
// 从STS服务获取的临时访问密钥(AccessKey ID、AccessKey Secret、StsToken)。
|
|
81
|
-
accessKeyId: AccessKeyId,
|
|
82
|
-
accessKeySecret: AccessKeySecret,
|
|
83
|
-
stsToken: SecurityToken,
|
|
84
|
-
// 刷新临时访问凭证的时间间隔,单位为毫秒。
|
|
85
|
-
refreshSTSTokenInterval: 3e5,
|
|
86
|
-
// 填写Bucket名称。
|
|
87
|
-
bucket: "giikin-material"
|
|
88
|
-
});
|
|
89
|
-
return new Promise((resolve, reject) => {
|
|
90
|
-
try {
|
|
91
|
-
const upload = options.parallel === 1 ? "put" : "multipartUpload";
|
|
92
|
-
ossClient[upload](aliossPath, file, options).then(() => {
|
|
93
|
-
const url2 = `https://sucai.giikin.cn/${aliossPath}`;
|
|
94
|
-
resolve({
|
|
95
|
-
name: name + ext,
|
|
96
|
-
url: url2,
|
|
97
|
-
lastModified,
|
|
98
|
-
md5: md5$1,
|
|
99
|
-
type: ext.replaceAll(".", ""),
|
|
100
|
-
size,
|
|
101
|
-
isExist: false
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
} catch (error) {
|
|
105
|
-
index$1.GmMessage.error(error || "\u4E0A\u4F20\u5931\u8D25");
|
|
106
|
-
reject(error);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
exports.aliossPutFile = aliossPutFile;
|
|
112
|
-
exports.getFileExist = getFileExist;
|
|
113
|
-
//# sourceMappingURL=alioss.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alioss.js","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":["getAdFileExist","md5","ts_md5_file","useAliossStsTokenStore","url","GmMessage"],"mappings":"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"}
|