Files
promptstory/utils/fileUtils.ts
2026-02-15 13:22:48 +01:00

43 lines
1.3 KiB
TypeScript

import { UploadedFile } from '../types';
export const processFile = async (file: File): Promise<UploadedFile> => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => {
const result = e.target?.result as string;
// Determine simplified MIME type for Gemini
let mimeType = file.type;
// Handle GPX explicitly as text if the browser doesn't detect it perfectly
if (file.name.toLowerCase().endsWith('.gpx')) {
mimeType = 'text/plain'; // Treat GPX as text for the prompt
} else if (file.name.toLowerCase().endsWith('.pdf')) {
mimeType = 'application/pdf';
}
// Extract base64 data if it's an image or PDF
let content = result;
if (result.includes('base64,')) {
content = result.split('base64,')[1];
}
resolve({
id: crypto.randomUUID(),
file,
previewUrl: file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined,
content: content,
mimeType: mimeType
});
};
reader.onerror = () => reject(new Error('Error reading file'));
if (file.name.toLowerCase().endsWith('.gpx')) {
reader.readAsText(file); // Read GPX as text
} else {
reader.readAsDataURL(file); // Read Images/PDFs as Base64
}
});
};