diff --git a/packages/server/src/utils/createAttachment.ts b/packages/server/src/utils/createAttachment.ts
index 1746cf9c61e..022a3f82ce4 100644
--- a/packages/server/src/utils/createAttachment.ts
+++ b/packages/server/src/utils/createAttachment.ts
@@ -75,23 +75,40 @@ export const createFileAttachment = async (req: Request) => {
usage: 'perPage',
legacyBuild: false
}
+ let allowedFileTypes: string[] = []
+ let fileUploadEnabled = false
if (chatflow.chatbotConfig) {
try {
const chatbotConfig = JSON.parse(chatflow.chatbotConfig)
- if (chatbotConfig?.fullFileUpload?.pdfFile) {
- if (chatbotConfig.fullFileUpload.pdfFile.usage) {
- pdfConfig.usage = chatbotConfig.fullFileUpload.pdfFile.usage
+ if (chatbotConfig?.fullFileUpload) {
+ fileUploadEnabled = chatbotConfig.fullFileUpload.status
+
+ // Get allowed file types from configuration
+ if (chatbotConfig.fullFileUpload.allowedUploadFileTypes) {
+ allowedFileTypes = chatbotConfig.fullFileUpload.allowedUploadFileTypes.split(',')
}
- if (chatbotConfig.fullFileUpload.pdfFile.legacyBuild !== undefined) {
- pdfConfig.legacyBuild = chatbotConfig.fullFileUpload.pdfFile.legacyBuild
+
+ // PDF specific configuration
+ if (chatbotConfig.fullFileUpload.pdfFile) {
+ if (chatbotConfig.fullFileUpload.pdfFile.usage) {
+ pdfConfig.usage = chatbotConfig.fullFileUpload.pdfFile.usage
+ }
+ if (chatbotConfig.fullFileUpload.pdfFile.legacyBuild !== undefined) {
+ pdfConfig.legacyBuild = chatbotConfig.fullFileUpload.pdfFile.legacyBuild
+ }
}
}
} catch (e) {
- // Use default PDF config if parsing fails
+ // Use default config if parsing fails
}
}
+ // Check if file upload is enabled
+ if (!fileUploadEnabled) {
+ throw new InternalFlowiseError(StatusCodes.BAD_REQUEST, 'File upload is not enabled for this chatflow')
+ }
+
// Find FileLoader node
const fileLoaderComponent = appServer.nodesPool.componentNodes['fileLoader']
const fileLoaderNodeInstanceFilePath = fileLoaderComponent.filePath as string
@@ -109,6 +126,21 @@ export const createFileAttachment = async (req: Request) => {
if (files.length) {
const isBase64 = req.body.base64
for (const file of files) {
+ if (!allowedFileTypes.length) {
+ throw new InternalFlowiseError(
+ StatusCodes.BAD_REQUEST,
+ `File type '${file.mimetype}' is not allowed. Allowed types: ${allowedFileTypes.join(', ')}`
+ )
+ }
+
+ // Validate file type against allowed types
+ if (allowedFileTypes.length > 0 && !allowedFileTypes.includes(file.mimetype)) {
+ throw new InternalFlowiseError(
+ StatusCodes.BAD_REQUEST,
+ `File type '${file.mimetype}' is not allowed. Allowed types: ${allowedFileTypes.join(', ')}`
+ )
+ }
+
await checkStorage(orgId, subscriptionId, appServer.usageCacheManager)
const fileBuffer = await getFileFromUpload(file.path ?? file.key)
diff --git a/packages/ui/src/ui-component/extended/FileUpload.jsx b/packages/ui/src/ui-component/extended/FileUpload.jsx
index bc1fd9962ad..d688cb75460 100644
--- a/packages/ui/src/ui-component/extended/FileUpload.jsx
+++ b/packages/ui/src/ui-component/extended/FileUpload.jsx
@@ -18,7 +18,7 @@ import useNotifier from '@/utils/useNotifier'
// API
import chatflowsApi from '@/api/chatflows'
-const message = `Uploaded files will be parsed as strings and sent to the LLM. If file upload is enabled on the Vector Store as well, this will override and take precedence.
+const message = `The full contents of uploaded files will be converted to text and sent to the Agent.
Refer docs for more details.`