import { useFetchWrapped } from './useFetchWrapped' import { useLoginState } from './useLoginState' const putOSS = (file: File, signed_url: string) => new Promise((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((resolve, reject) => { useFetchWrapped>( '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) }) })