diff --git a/.changeset/hip-seahorses-wash.md b/.changeset/hip-seahorses-wash.md
new file mode 100644
index 0000000000..e2a4dc87d9
--- /dev/null
+++ b/.changeset/hip-seahorses-wash.md
@@ -0,0 +1,8 @@
+---
+"@comet/cms-admin": minor
+"@comet/cms-api": minor
+---
+
+Validate filename length for uploads to DAM or FileUploads
+
+The filename can't exceed 255 characters.
diff --git a/packages/admin/cms-admin/src/dam/DataGrid/fileUpload/fileUploadErrorMessages.tsx b/packages/admin/cms-admin/src/dam/DataGrid/fileUpload/fileUploadErrorMessages.tsx
index e931007646..409a2ab1af 100644
--- a/packages/admin/cms-admin/src/dam/DataGrid/fileUpload/fileUploadErrorMessages.tsx
+++ b/packages/admin/cms-admin/src/dam/DataGrid/fileUpload/fileUploadErrorMessages.tsx
@@ -85,3 +85,13 @@ export const SvgContainsJavaScriptError = (): React.ReactElement => (
}}
/>
);
+
+export const FilenameTooLongError = () => (
+
+);
diff --git a/packages/admin/cms-admin/src/dam/DataGrid/fileUpload/useDamFileUpload.tsx b/packages/admin/cms-admin/src/dam/DataGrid/fileUpload/useDamFileUpload.tsx
index 8a50d104ae..09cb06a5b5 100644
--- a/packages/admin/cms-admin/src/dam/DataGrid/fileUpload/useDamFileUpload.tsx
+++ b/packages/admin/cms-admin/src/dam/DataGrid/fileUpload/useDamFileUpload.tsx
@@ -15,6 +15,7 @@ import { NewlyUploadedItem, useFileUploadContext } from "./FileUploadContext";
import { FileUploadErrorDialog } from "./FileUploadErrorDialog";
import {
FileExtensionTypeMismatchError,
+ FilenameTooLongError,
FileSizeError,
MaxResolutionError,
MissingFileExtensionError,
@@ -445,6 +446,8 @@ export const useDamFileUpload = (options: UploadDamFileOptions): FileUploadApi =
addValidationError(file, );
} else if (message.includes("File type and extension mismatch")) {
addValidationError(file, );
+ } else if (message.includes("Filename is too long")) {
+ addValidationError(file, );
} else {
addValidationError(file, );
}
diff --git a/packages/api/cms-api/src/dam/files/dam-upload-file.interceptor.ts b/packages/api/cms-api/src/dam/files/dam-upload-file.interceptor.ts
index 7648eee149..ce81e881b4 100644
--- a/packages/api/cms-api/src/dam/files/dam-upload-file.interceptor.ts
+++ b/packages/api/cms-api/src/dam/files/dam-upload-file.interceptor.ts
@@ -35,20 +35,20 @@ export function DamUploadFileInterceptor(fieldName: string): Type {
- this.fileValidationService.validateFileMetadata(file).then((result) => {
- if (result === undefined) {
- return cb(null, true);
- } else {
- return cb(new CometValidationException(result), false);
- }
- });
+ const errorMessage = this.fileValidationService.validateFileMetadata(file);
+
+ if (errorMessage === undefined) {
+ cb(null, true);
+ } else {
+ cb(new CometValidationException(errorMessage), false);
+ }
},
};
diff --git a/packages/api/cms-api/src/dam/files/file-validation.service.ts b/packages/api/cms-api/src/dam/files/file-validation.service.ts
index 70e7ce18b7..bbc71373c7 100644
--- a/packages/api/cms-api/src/dam/files/file-validation.service.ts
+++ b/packages/api/cms-api/src/dam/files/file-validation.service.ts
@@ -7,7 +7,7 @@ export class FileValidationService {
constructor(public config: { maxFileSize: number; acceptedMimeTypes: string[] }) {}
async validateFile(file: FileUploadInput): Promise {
- let error = await this.validateFileMetadata(file);
+ let error = this.validateFileMetadata(file);
if (error === undefined) {
error = await this.validateFileContents(file);
@@ -16,10 +16,10 @@ export class FileValidationService {
return error;
}
- async validateFileMetadata(file: FileUploadInput): Promise {
- //maximum file size
- if (file.size > this.config.maxFileSize * 1024 * 1024) {
- return "File is too large";
+ validateFileMetadata(file: Pick): undefined | string {
+ //maximum filename length
+ if (file.originalname.length > 255) {
+ return "Filename is too long";
}
//mime type in an accepted mime type
@@ -30,7 +30,7 @@ export class FileValidationService {
//extension matched mime type
const extension = file.originalname.split(".").pop()?.toLowerCase();
if (extension === undefined) {
- return `Invalid file name: Missing file extension`;
+ return "Invalid file name: Missing file extension";
}
const supportedExtensions = getValidExtensionsForMimetype(file.mimetype);
diff --git a/packages/api/cms-api/src/public-upload/public-upload-file.interceptor.ts b/packages/api/cms-api/src/public-upload/public-upload-file.interceptor.ts
index 3d56fb1ffd..19f706a1aa 100644
--- a/packages/api/cms-api/src/public-upload/public-upload-file.interceptor.ts
+++ b/packages/api/cms-api/src/public-upload/public-upload-file.interceptor.ts
@@ -35,20 +35,20 @@ export function PublicUploadFileInterceptor(fieldName: string): Type {
- this.fileValidationService.validateFileMetadata(file).then((result) => {
- if (result === undefined) {
- return cb(null, true);
- } else {
- return cb(new CometValidationException(result), false);
- }
- });
+ const errorMessage = this.fileValidationService.validateFileMetadata(file);
+
+ if (errorMessage === undefined) {
+ cb(null, true);
+ } else {
+ cb(new CometValidationException(errorMessage), false);
+ }
},
};