Skip to content

Commit 4cb6d65

Browse files
committed
improvement(uploads): migrate workflow file-upload sub-block to presigned PUT
1 parent dba6e2f commit 4cb6d65

1 file changed

Lines changed: 13 additions & 45 deletions

File tree

  • apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/file-upload

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/file-upload/file-upload.tsx

Lines changed: 13 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { fileDeleteContract } from '@/lib/api/contracts/storage-transfer'
1212
import { cn } from '@/lib/core/utils/cn'
1313
import { getExtensionFromMimeType } from '@/lib/uploads/utils/file-utils'
1414
import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-sub-block-value'
15-
import { useWorkspaceFiles } from '@/hooks/queries/workspace-files'
15+
import { useUploadWorkspaceFile, useWorkspaceFiles } from '@/hooks/queries/workspace-files'
1616
import { useWorkflowRegistry } from '@/stores/workflows/registry/store'
1717
import { useWorkflowStore } from '@/stores/workflows/workflow/store'
1818

@@ -165,6 +165,8 @@ export function FileUpload({
165165
refetch: refetchWorkspaceFiles,
166166
} = useWorkspaceFiles(isPreview ? '' : workspaceId)
167167

168+
const uploadFileMutation = useUploadWorkspaceFile()
169+
168170
const value = isPreview ? previewValue : storeValue
169171

170172
/**
@@ -310,58 +312,24 @@ export function FileUpload({
310312

311313
for (const file of validFiles) {
312314
try {
313-
const formData = new FormData()
314-
formData.append('file', file)
315-
formData.append('context', 'workspace')
316-
317-
if (workspaceId) {
318-
formData.append('workspaceId', workspaceId)
319-
}
320-
321-
// boundary-raw-fetch: multipart/form-data upload (FileUpload boundary), incompatible with requestJson which JSON-stringifies bodies
322-
const response = await fetch('/api/files/upload', {
323-
method: 'POST',
324-
body: formData,
315+
const data = await uploadFileMutation.mutateAsync({
316+
workspaceId,
317+
file,
318+
skipToast: true,
325319
})
326320

327-
const data = await response.json()
328-
329-
if (!response.ok) {
330-
const errorMessage =
331-
data.message || data.error || `Failed to upload file: ${response.status}`
332-
uploadErrors.push(`${file.name}: ${errorMessage}`)
333-
334-
setUploadError(errorMessage)
335-
336-
if (data.isDuplicate || response.status === 409) {
337-
setTimeout(() => setUploadError(null), 5000)
338-
}
339-
continue
340-
}
341-
342-
if (data.success === false) {
343-
const errorMessage = data.error || 'Upload failed'
344-
uploadErrors.push(`${file.name}: ${errorMessage}`)
345-
346-
setUploadError(errorMessage)
347-
348-
if (data.isDuplicate) {
349-
setTimeout(() => setUploadError(null), 5000)
350-
}
351-
continue
352-
}
353-
354321
uploadedFiles.push({
355-
name: file.name,
356-
path: data.file?.url || data.url, // Workspace: data.file.url, Non-workspace: data.url
357-
key: data.file?.key || data.key, // Storage key for proper file access
358-
size: file.size,
359-
type: file.type,
322+
name: data.file.name,
323+
path: data.file.url,
324+
key: data.file.key,
325+
size: data.file.size,
326+
type: data.file.type,
360327
})
361328
} catch (error) {
362329
logger.error(`Error uploading ${file.name}:`, error)
363330
const errorMessage = error instanceof Error ? error.message : 'Unknown error'
364331
uploadErrors.push(`${file.name}: ${errorMessage}`)
332+
setUploadError(errorMessage)
365333
}
366334
}
367335

0 commit comments

Comments
 (0)