fix(file): bun issues with new file creation (#3582)

* fix(files): new file bun error

* update constant

* fix types
This commit is contained in:
Vikhyath Mondreti
2026-03-14 10:56:13 -07:00
committed by GitHub
parent 8f15be23a0
commit c738226c06
3 changed files with 25 additions and 14 deletions

View File

@@ -46,9 +46,10 @@ export async function POST(request: NextRequest) {
const formData = await request.formData()
const files = formData.getAll('file') as File[]
const rawFiles = formData.getAll('file')
const files = rawFiles.filter((f): f is File => f instanceof File)
if (!files || files.length === 0) {
if (files.length === 0) {
throw new InvalidRequestError('No files provided')
}
@@ -74,6 +75,9 @@ export async function POST(request: NextRequest) {
for (const file of files) {
const originalName = file.name
if (!originalName) {
throw new InvalidRequestError('File name is missing')
}
if (!validateFileExtension(originalName)) {
const extension = originalName.split('.').pop()?.toLowerCase() || 'unknown'

View File

@@ -87,32 +87,36 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
}
const formData = await request.formData()
const file = formData.get('file') as File
const rawFile = formData.get('file')
if (!file) {
if (!rawFile || !(rawFile instanceof File)) {
return NextResponse.json({ error: 'No file provided' }, { status: 400 })
}
// Validate file size (100MB limit)
const fileName = rawFile.name
if (!fileName) {
return NextResponse.json({ error: 'File name is missing' }, { status: 400 })
}
const maxSize = 100 * 1024 * 1024
if (file.size > maxSize) {
if (rawFile.size > maxSize) {
return NextResponse.json(
{ error: `File size exceeds 100MB limit (${(file.size / (1024 * 1024)).toFixed(2)}MB)` },
{ error: `File size exceeds 100MB limit (${(rawFile.size / (1024 * 1024)).toFixed(2)}MB)` },
{ status: 400 }
)
}
const buffer = Buffer.from(await file.arrayBuffer())
const buffer = Buffer.from(await rawFile.arrayBuffer())
const userFile = await uploadWorkspaceFile(
workspaceId,
session.user.id,
buffer,
file.name,
file.type || 'application/octet-stream'
fileName,
rawFile.type || 'application/octet-stream'
)
logger.info(`[${requestId}] Uploaded workspace file: ${file.name}`)
logger.info(`[${requestId}] Uploaded workspace file: ${fileName}`)
recordAudit({
workspaceId,
@@ -122,8 +126,8 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
action: AuditAction.FILE_UPLOADED,
resourceType: AuditResourceType.FILE,
resourceId: userFile.id,
resourceName: file.name,
description: `Uploaded file "${file.name}"`,
resourceName: fileName,
description: `Uploaded file "${fileName}"`,
request,
})

View File

@@ -439,7 +439,10 @@ export function isValidEnvVarName(name: string): boolean {
return PATTERNS.ENV_VAR_NAME.test(name)
}
export function sanitizeFileName(fileName: string): string {
export function sanitizeFileName(fileName: string | null | undefined): string {
if (!fileName || typeof fileName !== 'string') {
return 'untitled'
}
return fileName.replace(/\s+/g, '-').replace(/[^a-zA-Z0-9.-]/g, '_')
}