nili
5 months ago
18 changed files with 198 additions and 21 deletions
@ -1 +1 @@ |
|||||
!function(){"use strict";var t="/".replace(/([^/])$/,"$1/"),e=location.pathname,n=e.startsWith(t)&&decodeURI("/".concat(e.slice(t.length)));if(n){var a=document,c=a.head,r=a.createElement.bind(a),i=function(t,e,n){var a,c=e.r[t]||(null===(a=Object.entries(e.r).find((function(e){var n=e[0];return new RegExp("^".concat(n.replace(/\/:[^/]+/g,"/[^/]+").replace("/*","/.+"),"$")).test(t)})))||void 0===a?void 0:a[1]);return null==c?void 0:c.map((function(t){var a=e.f[t][1],c=e.f[t][0];return{type:c.split(".").pop(),url:"".concat(n.publicPath).concat(c),attrs:[["data-".concat(e.b),"".concat(e.p,":").concat(a)]]}}))}(n,{"p":"ant-design-pro","b":"webpack","f":[["51.a2ea1b3b.async.js",51],["134.6fc81d91.async.js",134],["169.57647c7d.async.js",169],["p__Welcome.61596037.async.js",185],["p__MoneyManagement.185eb84a.async.js",190],["247.3fe8fb10.async.js",247],["t__plugin-layout__Layout.6cae69f5.chunk.css",301],["t__plugin-layout__Layout.4594a64b.async.js",301],["p__User__Login__index.9d3ab92e.async.js",366],["p__DeviceOwnerApp.ec53e5c4.async.js",371],["390.41467286.async.js",390],["393.38316f72.async.js",393],["397.fb5f72c1.async.js",397],["p__SuperAdmin.0754b3a9.async.js",455],["531.4c68f902.async.js",531],["539.49b7b156.async.js",539],["p__AdvRecordListV2.56bcbbaa.async.js",542],["p__Bind.b6ee068f.async.js",557],["559.016bfdbb.async.js",559],["p__404.0c100574.async.js",571],["635.20e45f05.async.js",635],["p__App__AppManagement.f547622b.async.js",731],["p__AdminManagement.5e2368b3.async.js",816],["822.4ba8fa04.async.js",822],["841.614ef4c0.async.js",841],["p__AdvRecordList.8e5ef22c.async.js",857],["p__UserManagement.b4bfbf1d.async.js",903],["905.6e225d1b.async.js",905],["930.fca7adbf.async.js",930]],"r":{"/*":[19,27],"/":[1,6,7,18,20,27],"/welcome":[1,2,3,11,18,28,6,7,20,27],"/super":[0,1,2,5,13,14,15,23,27,28,6,7,18,20],"/adminList":[0,2,22,23,1,6,7,18,20,27],"/bind":[1,2,11,12,17,18,28,6,7,20,27],"/appList":[0,1,2,5,12,14,15,21,23,27,28,6,7,18,20],"/advList/:code":[0,1,2,14,15,18,23,24,25,27,28,6,7,20],"/advListV2/:code":[0,1,2,14,15,16,18,23,24,27,28,6,7,20],"/user/:code":[0,1,2,14,15,23,26,27,28,6,7,18,20],"/money/:code":[0,1,2,4,14,15,23,27,28,6,7,18,20],"/app/:code":[0,1,2,9,14,15,18,23,24,27,28,6,7,20],"/user/login":[1,2,8,14,23]}},{publicPath:"/"});null==i||i.forEach((function(t){var e,n=t.type,a=t.url;if("js"===n)(e=r("script")).src=a,e.async=!0;else{if("css"!==n)return;(e=r("link")).href=a,e.rel="preload",e.as="style"}t.attrs.forEach((function(t){e.setAttribute(t[0],t[1]||"")})),c.appendChild(e)}))}}(); |
!function(){"use strict";var t="/".replace(/([^/])$/,"$1/"),e=location.pathname,n=e.startsWith(t)&&decodeURI("/".concat(e.slice(t.length)));if(n){var a=document,c=a.head,r=a.createElement.bind(a),i=function(t,e,n){var a,c=e.r[t]||(null===(a=Object.entries(e.r).find((function(e){var n=e[0];return new RegExp("^".concat(n.replace(/\/:[^/]+/g,"/[^/]+").replace("/*","/.+"),"$")).test(t)})))||void 0===a?void 0:a[1]);return null==c?void 0:c.map((function(t){var a=e.f[t][1],c=e.f[t][0];return{type:c.split(".").pop(),url:"".concat(n.publicPath).concat(c),attrs:[["data-".concat(e.b),"".concat(e.p,":").concat(a)]]}}))}(n,{"p":"ant-design-pro","b":"webpack","f":[["51.a2ea1b3b.async.js",51],["134.6fc81d91.async.js",134],["169.57647c7d.async.js",169],["p__Welcome.61596037.async.js",185],["p__MoneyManagement.60ec3db9.async.js",190],["247.3fe8fb10.async.js",247],["t__plugin-layout__Layout.6cae69f5.chunk.css",301],["t__plugin-layout__Layout.4594a64b.async.js",301],["p__User__Login__index.9d3ab92e.async.js",366],["p__DeviceOwnerApp.ec53e5c4.async.js",371],["390.41467286.async.js",390],["393.38316f72.async.js",393],["397.fb5f72c1.async.js",397],["p__SuperAdmin.fe6b99ac.async.js",455],["531.4c68f902.async.js",531],["539.49b7b156.async.js",539],["p__AdvRecordListV2.ced10464.async.js",542],["p__Bind.b6ee068f.async.js",557],["559.016bfdbb.async.js",559],["p__404.0c100574.async.js",571],["635.20e45f05.async.js",635],["p__App__AppManagement.5e21b4b7.async.js",731],["p__AdminManagement.5e2368b3.async.js",816],["822.4ba8fa04.async.js",822],["841.614ef4c0.async.js",841],["p__AdvRecordList.8e5ef22c.async.js",857],["p__UserManagement.c0a8d03f.async.js",903],["905.6e225d1b.async.js",905],["930.fca7adbf.async.js",930]],"r":{"/*":[19,27],"/":[1,6,7,18,20,27],"/welcome":[1,2,3,11,18,28,6,7,20,27],"/super":[0,1,2,5,13,14,15,23,27,28,6,7,18,20],"/adminList":[0,2,22,23,1,6,7,18,20,27],"/bind":[1,2,11,12,17,18,28,6,7,20,27],"/appList":[0,1,2,5,12,14,15,21,23,27,28,6,7,18,20],"/advList/:code":[0,1,2,14,15,18,23,24,25,27,28,6,7,20],"/advListV2/:code":[0,1,2,14,15,16,18,23,24,27,28,6,7,20],"/user/:code":[0,1,2,14,15,23,26,27,28,6,7,18,20],"/money/:code":[0,1,2,4,14,15,23,27,28,6,7,18,20],"/app/:code":[0,1,2,9,14,15,18,23,24,27,28,6,7,20],"/user/login":[1,2,8,14,23]}},{publicPath:"/"});null==i||i.forEach((function(t){var e,n=t.type,a=t.url;if("js"===n)(e=r("script")).src=a,e.async=!0;else{if("css"!==n)return;(e=r("link")).href=a,e.rel="preload",e.as="style"}t.attrs.forEach((function(t){e.setAttribute(t[0],t[1]||"")})),c.appendChild(e)}))}}(); |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,110 @@ |
|||||
|
import { toMD5 } from '@/utils/encryptUtil'; |
||||
|
import { InboxOutlined } from '@ant-design/icons'; |
||||
|
import OSS from 'ali-oss'; |
||||
|
import { Button, message, Upload, UploadFile, UploadProps } from 'antd'; |
||||
|
import React, { useEffect, useState } from 'react'; |
||||
|
import { getSts } from '../services/matrix/admin'; |
||||
|
|
||||
|
interface OSSUploadMultipleProps { |
||||
|
value?: UploadFile[]; |
||||
|
onChange?: (fileList: UploadFile[]) => void; |
||||
|
} |
||||
|
|
||||
|
const OSSUploadMultiple: React.FC<OSSUploadMultipleProps> = ({ value, onChange }) => { |
||||
|
const [uploading, setUploading] = useState(false); |
||||
|
const [ossClient, setOssClient] = useState<OSS | null>(null); |
||||
|
const [fileList, setFileList] = useState<UploadFile[]>([]); |
||||
|
|
||||
|
useEffect(() => { |
||||
|
if (value) { |
||||
|
setFileList(value); |
||||
|
} |
||||
|
}, [value]); |
||||
|
|
||||
|
useEffect(() => { |
||||
|
async function initOssClient() { |
||||
|
try { |
||||
|
const stsResponse = await getSts(); // 假设你有一个 getSTS 函数可以获取 STS 凭证
|
||||
|
if ( |
||||
|
!stsResponse.data || |
||||
|
!stsResponse.data.accessKeySecret || |
||||
|
!stsResponse.data.accessKeyId |
||||
|
) { |
||||
|
message.error('初始化失败,请稍后再试'); |
||||
|
return; |
||||
|
} |
||||
|
const client = new OSS({ |
||||
|
region: 'oss-cn-beijing', |
||||
|
accessKeyId: stsResponse.data.accessKeyId, |
||||
|
accessKeySecret: stsResponse.data.accessKeySecret, |
||||
|
stsToken: stsResponse.data.securityToken, |
||||
|
bucket: stsResponse.data.bucket, |
||||
|
}); |
||||
|
setOssClient(client); |
||||
|
} catch (error) { |
||||
|
message.error('初始化 OSS 客户端失败'); |
||||
|
} |
||||
|
} |
||||
|
initOssClient(); |
||||
|
}, []); |
||||
|
|
||||
|
useEffect(() => { |
||||
|
if (onChange) { |
||||
|
onChange(fileList); |
||||
|
} |
||||
|
}, [fileList]); |
||||
|
|
||||
|
const handleUpload: UploadProps['customRequest'] = async (options) => { |
||||
|
const { file } = options; |
||||
|
if (file instanceof File) { |
||||
|
setUploading(true); |
||||
|
try { |
||||
|
const md5 = await toMD5(file); |
||||
|
const fileName = `matrix/${md5}.${file.name.split('.').pop()}`; |
||||
|
await ossClient?.put(fileName, file, { |
||||
|
headers: { |
||||
|
'Content-Type': file.type, |
||||
|
}, |
||||
|
}); |
||||
|
const fileUrl = `https://apks.bzgames.cn/${fileName}`; |
||||
|
setUploading(false); |
||||
|
setFileList((prevFileList) => [ |
||||
|
...prevFileList, |
||||
|
{ |
||||
|
uid: file.uid, |
||||
|
name: file.name, |
||||
|
status: 'done', |
||||
|
url: fileUrl, |
||||
|
}, |
||||
|
]); |
||||
|
} catch (error) { |
||||
|
message.error('文件上传失败'); |
||||
|
} finally { |
||||
|
setUploading(false); |
||||
|
} |
||||
|
} else { |
||||
|
message.error('上传文件类型错误'); |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
const onRemove = (file: UploadFile) => { |
||||
|
const files = (fileList || []).filter((v) => v.url !== file.url); |
||||
|
setFileList(files); |
||||
|
}; |
||||
|
|
||||
|
return ( |
||||
|
<Upload |
||||
|
multiple |
||||
|
fileList={fileList} |
||||
|
onRemove={onRemove} |
||||
|
customRequest={handleUpload} |
||||
|
disabled={uploading || !ossClient} |
||||
|
> |
||||
|
<Button style={{ marginTop: 10 }} type="primary" icon={<InboxOutlined />}> |
||||
|
选择文件 |
||||
|
</Button> |
||||
|
</Upload> |
||||
|
); |
||||
|
}; |
||||
|
|
||||
|
export default OSSUploadMultiple; |
Loading…
Reference in new issue