The file input allows an accept attribute to indicate what type of file may be submitted. The type is the client’s MIME type, which may vary by operating system, installed applications, and end user configuration.
A sample set of MIME types used for an accept attribute is:
The browser usually doesn’t enforce the accept attribute.
The MIME type sent from the client is unreliable, since many clients use the file extension to indicate the MIME type for the browser, and that MIME type is sent to the server.
An alternative is to ignore the MIME type, but use the Linux file command to test the file, and use it for validation.
In the example below, there are three identical files of raw audio, with the extension of pdf, raw, and txt. Linux uses the file content to determine the type, rather than the extensions.
[tmp]$ file -i audio.*