This commit is contained in:
c
2025-03-12 20:11:03 +08:00
commit 70b7c82c97
1178 changed files with 148185 additions and 0 deletions
@@ -0,0 +1,17 @@
class UploadProvider {
constructor() {
this.callbacks = {}
}
on (event, callback) {
this.callbacks[event] = callback
}
emit (event, data) {
if (this.callbacks[event]) {
this.callbacks[event](data)
}
}
}
export default UploadProvider
@@ -0,0 +1,14 @@
import InternalUploadProvider from './internal'
import QiniuUploadProvider from './qiniu'
function createUploaderProviderInstance (provider) {
switch (provider) {
case 'internal':
return new InternalUploadProvider()
case 'qiniu':
return new QiniuUploadProvider()
default:
return new InternalUploadProvider()
}
}
export default createUploaderProviderInstance
@@ -0,0 +1,81 @@
import BaseProvider from './base';
const uniMediaLibraryCo = uniCloud.importObject('uni-media-library-co', {
customUI: true
})
class InternalUploadProvider extends BaseProvider {
async upload (files) {
for (let i = 0; i < files.length; i++) {
const file = files[i]
const ext = await file.getFileType()
try {
const result = await uniCloud.uploadFile({
filePath: file.originUrl,
fileType: file.mediaType,
cloudPathAsRealPath: true,
cloudPath: `uni-media-library/${Date.now()}.${ext}`,
onUploadProgress: (progressEvent) => {
file.setStatus('uploading')
file.setPercent(Math.floor((progressEvent.loaded / progressEvent.total) * 100))
this.emit('progress', file)
}
})
file.setStatus('uploaded')
file.setUrl(result.fileID)
file.setPercent(100)
} catch (e) {
file.setStatus('failed')
file.setError(e)
console.error(e)
}
if ((i + 1) === files.length) {
this.emit('success', files)
}
}
}
async cloudUpload (files, options) {
const { imageLibraryProvider } = options
for (let i = 0; i < files.length; i++) {
const file = files[i]
try {
file.setStatus('uploading')
file.setPercent(0)
this.emit('progress', file)
const result = await uniMediaLibraryCo.uploadImage({
url: file.originUrl,
id: file.id,
provider: imageLibraryProvider
})
if (!result.data.fileID) {
file.setStatus('failed')
file.setError(new Error('上传失败'))
this.emit('error', file)
return
}
file.setStatus('uploaded')
file.setUrl(result.data.fileID)
file.setPercent(100)
file.setAttributes(result.data.detail)
} catch (e) {
file.setStatus('failed')
file.setError(e)
console.error(e)
this.emit('error', file)
}
if ((i + 1) === files.length) {
this.emit('success', files)
}
}
}
}
export default InternalUploadProvider
@@ -0,0 +1,5 @@
import BaseProvider from './base';
class QiniuUploadProvider extends BaseProvider {}
export default QiniuUploadProvider