Fix file upload

This commit is contained in:
MartinBraquet
2025-07-31 16:31:19 +02:00
parent 1256badc65
commit 67a444c0f2
2 changed files with 36 additions and 49 deletions

View File

@@ -21,60 +21,49 @@ export async function POST(request: Request) {
const formData = await request.formData();
console.log('formData', formData);
let files = formData.get('files') as File | null | File[];
const file = formData.get('file') as File | null;
if (files?.name) {
files = [files];
if (!file) return NextResponse.json({error: 'No file provided'}, {status: 400});
// Validate file type
if (!file.type.startsWith('image/')) {
return NextResponse.json({error: 'Only image files are allowed'}, {status: 400});
}
const results = await Promise.all(
files.map(async (file) => {
if (!file) {
return NextResponse.json({error: 'No file provided'}, {status: 400});
}
// Validate file size (5MB max)
if (file.size > 5 * 1024 * 1024) {
return NextResponse.json({error: 'File size must be less than 5MB'}, {status: 400});
}
// Validate file type
if (!file.type.startsWith('image/')) {
return NextResponse.json({error: 'Only image files are allowed'}, {status: 400});
}
const fileExtension = file.name.split('.').pop();
const fileName = `${uuidv4()}.${fileExtension}`;
const fileBuffer = await file.arrayBuffer();
const key = `profile-pictures/${fileName}`;
// Validate file size (5MB max)
if (file.size > 5 * 1024 * 1024) {
return NextResponse.json({error: 'File size must be less than 5MB'}, {status: 400});
}
const uploadParams = {
Bucket: process.env.AWS_S3_BUCKET_NAME!,
Key: key,
Body: Buffer.from(fileBuffer),
ContentType: file.type,
};
const fileExtension = file.name.split('.').pop();
const fileName = `${uuidv4()}.${fileExtension}`;
const fileBuffer = await file.arrayBuffer();
const key = `profile-pictures/${fileName}`;
const response = await s3Client.send(new PutObjectCommand(uploadParams));
console.log(`Response: ${response}`);
const uploadParams = {
Bucket: process.env.AWS_S3_BUCKET_NAME!,
Key: key,
Body: Buffer.from(fileBuffer),
ContentType: file.type,
};
const response = await s3Client.send(new PutObjectCommand(uploadParams));
console.log(`Response: ${response}`);
// get signed url
const url = await getSignedUrl(
s3Client,
new GetObjectCommand({
Bucket: process.env.AWS_S3_BUCKET_NAME!,
Key: key,
}),
{expiresIn: 300} // 5 minutes
);
console.log(`Signed URL: ${url}`);
// const fileUrl = `${process.env.AWS_S3_BUCKET_NAME}/profile-pictures/${fileName}`;
return {url: url, key: key};
})
// get signed url
const url = await getSignedUrl(
s3Client,
new GetObjectCommand({
Bucket: process.env.AWS_S3_BUCKET_NAME!,
Key: key,
}),
{expiresIn: 300} // 5 minutes
);
return NextResponse.json(results);
console.log(`Signed URL: ${url}`);
// const fileUrl = `${process.env.AWS_S3_BUCKET_NAME}/profile-pictures/${fileName}`;
return NextResponse.json({url: url, key: key});
} catch (error) {
console.error('Upload error:', error);
return NextResponse.json(

View File

@@ -147,7 +147,7 @@ function RegisterComponent() {
}
const formData = new FormData();
formData.append('files', file);
formData.append('file', file);
try {
setIsUploading(true);
@@ -164,9 +164,7 @@ function RegisterComponent() {
return;
}
const results = await response.json();
const {url, key} = results[0]
const {url, key} = await response.json();
if (headShot) {
setImage(url);
setKey(key);