51 lines
1.3 KiB
TypeScript
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)
|
|
})
|
|
})
|