Files
xsh-assistant-next/app/composables/useFileGo.ts

51 lines
1.3 KiB
TypeScript

import { useFetchWrapped } from './useFetchWrapped'
import { useLoginState } from './useLoginState'
const putOSS = (file: File, signed_url: string) =>
new Promise<void>((resolve, reject) => {
let xhr = new XMLHttpRequest()
xhr.open('PUT', signed_url as string)
xhr.setRequestHeader('Content-Type', '')
xhr.onload = () => {
if (xhr.status === 200) {
resolve()
} else {
reject()
}
}
xhr.onerror = reject
xhr.send(file)
})
export const useFileGo = (
file: File,
type: 'material' | 'ppt' | 'subtitles' | 'preview' | 'tmp'
) =>
new Promise<string>((resolve, reject) => {
useFetchWrapped<req.file.Upload & AuthedRequest, BaseResponse<string>>(
'App.Tools_Upload.DirectUpload',
{
token: useLoginState().token!,
user_id: useLoginState().user.id,
file_name: file.name,
file_type: type,
file_size: file.size,
file_mime: file.type,
}
)
.then(async (res) => {
if (res.data !== '') {
try {
await putOSS(file, res.data)
let url = res.data.split('?')[0]
resolve(url)
} catch (err) {
reject(err)
}
}
})
.catch((err) => {
reject(err)
})
})