openhands / src /utils /file-validation.ts
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
a070805 verified
Raw
History Blame Contribute Delete
1.91 kB
const MAX_FILE_SIZE = 3 * 1024 * 1024; // 3MB maximum file size
const MAX_TOTAL_SIZE = 3 * 1024 * 1024; // 3MB maximum total size for all files combined
export interface FileValidationResult {
isValid: boolean;
errorMessage?: string;
oversizedFiles?: string[];
}
/**
* Validates individual file sizes
*/
export function validateIndividualFileSizes(
files: File[],
): FileValidationResult {
const oversizedFiles = files.filter((file) => file.size > MAX_FILE_SIZE);
if (oversizedFiles.length > 0) {
const fileNames = oversizedFiles.map((f) => f.name);
return {
isValid: false,
errorMessage: `Files exceeding 3MB are not allowed: ${fileNames.join(", ")}`,
oversizedFiles: fileNames,
};
}
return { isValid: true };
}
/**
* Validates total file size including existing files
*/
export function validateTotalFileSize(
newFiles: File[],
existingFiles: File[] = [],
): FileValidationResult {
const currentTotalSize = existingFiles.reduce(
(sum, file) => sum + file.size,
0,
);
const newFilesSize = newFiles.reduce((sum, file) => sum + file.size, 0);
const totalSize = currentTotalSize + newFilesSize;
if (totalSize > MAX_TOTAL_SIZE) {
const totalSizeMB = (totalSize / (1024 * 1024)).toFixed(1);
return {
isValid: false,
errorMessage: `Total file size would be ${totalSizeMB}MB, exceeding the 3MB limit. Please select fewer or smaller files.`,
};
}
return { isValid: true };
}
/**
* Validates both individual and total file sizes
*/
export function validateFiles(
newFiles: File[],
existingFiles: File[] = [],
): FileValidationResult {
// First check individual file sizes
const individualValidation = validateIndividualFileSizes(newFiles);
if (!individualValidation.isValid) {
return individualValidation;
}
// Then check total size
return validateTotalFileSize(newFiles, existingFiles);
}