37 lines
909 B
TypeScript
37 lines
909 B
TypeScript
![]() |
import { upload } from '@/service/base'
|
||
|
|
||
|
type FileUploadParams = {
|
||
|
file: File
|
||
|
onProgressCallback: (progress: number) => void
|
||
|
onSuccessCallback: (res: { id: string }) => void
|
||
|
onErrorCallback: () => void
|
||
|
}
|
||
|
type FileUpload = (v: FileUploadParams, isPublic?: boolean, url?: string) => void
|
||
|
export const imageUpload: FileUpload = ({
|
||
|
file,
|
||
|
onProgressCallback,
|
||
|
onSuccessCallback,
|
||
|
onErrorCallback,
|
||
|
}, isPublic, url) => {
|
||
|
const formData = new FormData()
|
||
|
formData.append('file', file)
|
||
|
const onProgress = (e: ProgressEvent) => {
|
||
|
if (e.lengthComputable) {
|
||
|
const percent = Math.floor(e.loaded / e.total * 100)
|
||
|
onProgressCallback(percent)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
upload({
|
||
|
xhr: new XMLHttpRequest(),
|
||
|
data: formData,
|
||
|
onprogress: onProgress,
|
||
|
}, isPublic, url)
|
||
|
.then((res: { id: string }) => {
|
||
|
onSuccessCallback(res)
|
||
|
})
|
||
|
.catch(() => {
|
||
|
onErrorCallback()
|
||
|
})
|
||
|
}
|