webapp/src/lib/handleImageUpload.ts

41 lines
1.2 KiB
TypeScript
Raw Normal View History

import { UploadFile } from '@solid-primitives/upload'
2024-07-05 14:08:12 +00:00
import { thumborUrl } from '../config'
2024-06-24 17:50:27 +00:00
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,
2024-06-26 08:22:05 +00:00
headers: token ? { Authorization: token } : {}
})
const location = response.headers.get('Location')
2024-06-24 17:50:27 +00:00
const url = `${thumborUrl}/unsafe/production${location?.slice(0, location.lastIndexOf('/'))}`
const originalFilename = location?.slice(location.lastIndexOf('/') + 1)
2023-11-02 16:47:57 +00:00
// 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,
2024-06-26 08:22:05 +00:00
url
}
}