webapp/src/lib/handleImageUpload.ts
2024-07-05 17:08:12 +03:00

41 lines
1.2 KiB
TypeScript

import { UploadFile } from '@solid-primitives/upload'
import { thumborUrl } from '../config'
export const handleImageUpload = async (uploadFile: UploadFile, token: string) => {
const formData = new FormData()
formData.append('media', uploadFile.file, uploadFile.name)
const response = await fetch(`${thumborUrl}/image`, {
method: 'POST',
body: formData,
headers: token ? { Authorization: token } : {}
})
const location = response.headers.get('Location')
const url = `${thumborUrl}/unsafe/production${location?.slice(0, location.lastIndexOf('/'))}`
const originalFilename = location?.slice(location.lastIndexOf('/') + 1)
// check that image is available
await new Promise<void>((resolve, reject) => {
let retryCount = 0
const checkUploadedImage = () => {
const uploadedImage = new Image()
uploadedImage.addEventListener('load', () => resolve())
uploadedImage.addEventListener('error', () => {
retryCount++
if (retryCount >= 3) {
return reject()
}
setTimeout(() => checkUploadedImage(), 1000)
})
uploadedImage.src = url
}
checkUploadedImage()
})
return {
originalFilename,
url
}
}