Skip to content

Instantly share code, notes, and snippets.

@samuelkarani
Last active December 16, 2022 11:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samuelkarani/9adb5683c6c64f9d788d962f23e14a77 to your computer and use it in GitHub Desktop.
Save samuelkarani/9adb5683c6c64f9d788d962f23e14a77 to your computer and use it in GitHub Desktop.
import * as fileType from 'file-type';
const MIN_FILE_SIZE = 0;
const MAX_FILE_SIZE = Number.MAX_SAFE_INTEGER;
const ALLOWED_FILE_MIMETYPES: string[] = [];
function validateFileSize(file: File): boolean {
return file.size >= MIN_FILE_SIZE && file.size <= MAX_FILE_SIZE;
}
function validateFileMimetype(file: File): Promise<boolean> {
return new Promise((resolve, reject) => {
const blob = file.slice(0, fileType.minimumBytes);
const reader = new FileReader();
reader.onloadend = (e) => {
if (e.target.readyState !== FileReader.DONE) {
reject("Error validating mime");
}
const bytes = new Uint8Array(e.target.result);
const { ext, mime } = fileType.fromBuffer(bytes);
console.log("Validating file:", ext, mime);
resolve(ALLOWED_FILE_MIMETYPES.includes(mime));
};
reader.readAsArrayBuffer(blob);
});
}
export async function validateFile(file: File): Promise<boolean> {
return validateFileSize(file) && (await validateFileMimetype(file));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment