Skip to content

Commit c738226

Browse files
fix(file): bun issues with new file creation (#3582)
* fix(files): new file bun error * update constant * fix types
1 parent 8f15be2 commit c738226

File tree

3 files changed

+25
-14
lines changed

3 files changed

+25
-14
lines changed

apps/sim/app/api/files/upload/route.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ export async function POST(request: NextRequest) {
4646

4747
const formData = await request.formData()
4848

49-
const files = formData.getAll('file') as File[]
49+
const rawFiles = formData.getAll('file')
50+
const files = rawFiles.filter((f): f is File => f instanceof File)
5051

51-
if (!files || files.length === 0) {
52+
if (files.length === 0) {
5253
throw new InvalidRequestError('No files provided')
5354
}
5455

@@ -74,6 +75,9 @@ export async function POST(request: NextRequest) {
7475

7576
for (const file of files) {
7677
const originalName = file.name
78+
if (!originalName) {
79+
throw new InvalidRequestError('File name is missing')
80+
}
7781

7882
if (!validateFileExtension(originalName)) {
7983
const extension = originalName.split('.').pop()?.toLowerCase() || 'unknown'

apps/sim/app/api/workspaces/[id]/files/route.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,32 +87,36 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
8787
}
8888

8989
const formData = await request.formData()
90-
const file = formData.get('file') as File
90+
const rawFile = formData.get('file')
9191

92-
if (!file) {
92+
if (!rawFile || !(rawFile instanceof File)) {
9393
return NextResponse.json({ error: 'No file provided' }, { status: 400 })
9494
}
9595

96-
// Validate file size (100MB limit)
96+
const fileName = rawFile.name
97+
if (!fileName) {
98+
return NextResponse.json({ error: 'File name is missing' }, { status: 400 })
99+
}
100+
97101
const maxSize = 100 * 1024 * 1024
98-
if (file.size > maxSize) {
102+
if (rawFile.size > maxSize) {
99103
return NextResponse.json(
100-
{ error: `File size exceeds 100MB limit (${(file.size / (1024 * 1024)).toFixed(2)}MB)` },
104+
{ error: `File size exceeds 100MB limit (${(rawFile.size / (1024 * 1024)).toFixed(2)}MB)` },
101105
{ status: 400 }
102106
)
103107
}
104108

105-
const buffer = Buffer.from(await file.arrayBuffer())
109+
const buffer = Buffer.from(await rawFile.arrayBuffer())
106110

107111
const userFile = await uploadWorkspaceFile(
108112
workspaceId,
109113
session.user.id,
110114
buffer,
111-
file.name,
112-
file.type || 'application/octet-stream'
115+
fileName,
116+
rawFile.type || 'application/octet-stream'
113117
)
114118

115-
logger.info(`[${requestId}] Uploaded workspace file: ${file.name}`)
119+
logger.info(`[${requestId}] Uploaded workspace file: ${fileName}`)
116120

117121
recordAudit({
118122
workspaceId,
@@ -122,8 +126,8 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
122126
action: AuditAction.FILE_UPLOADED,
123127
resourceType: AuditResourceType.FILE,
124128
resourceId: userFile.id,
125-
resourceName: file.name,
126-
description: `Uploaded file "${file.name}"`,
129+
resourceName: fileName,
130+
description: `Uploaded file "${fileName}"`,
127131
request,
128132
})
129133

apps/sim/executor/constants.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,10 @@ export function isValidEnvVarName(name: string): boolean {
439439
return PATTERNS.ENV_VAR_NAME.test(name)
440440
}
441441

442-
export function sanitizeFileName(fileName: string): string {
442+
export function sanitizeFileName(fileName: string | null | undefined): string {
443+
if (!fileName || typeof fileName !== 'string') {
444+
return 'untitled'
445+
}
443446
return fileName.replace(/\s+/g, '-').replace(/[^a-zA-Z0-9.-]/g, '_')
444447
}
445448

0 commit comments

Comments
 (0)