Last active
December 16, 2022 11:09
-
-
Save samuelkarani/9adb5683c6c64f9d788d962f23e14a77 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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