[File Format Verification] With Elixir
Anthony Gonzalez
Posted on January 19, 2022
Let's handle file name extensions with Elixir, useful to validate the type of format of files that we would like to allow.
Step 1:
Let's create a new Elixir project by going to the command line and typing the following in your desired directory:
$ mix new file_validator && cd file_validator
Step 2:
Open your test file test/file_validator_test.exs
, remove the autogenerated test and add the following test:
test "file validation should be false" do
file = "somefile.exe"
assert FileValidator.valid?(file) == false
end
test "file validation should be true" do
file = "somefile.png"
assert FileValidator.valid?(file) == true
end
Go to the command line and run the test mix test
Step 3:
Let's make our test pass by opening our main project file lib/file_validator.ex
, remove the autogenerated hello world function and add the following:
@extension_whitelist ~w(.jpg .jpeg .gif .png .pdf)
def valid?(file) do
file_extension = get_ext(file)
@extension_whitelist
|> Enum.member?(file_extension)
end
defp get_ext(file) do
file
|> Path.extname()
|> String.downcase()
end
Get back to the command line and run the test mix test
now our test should pass with no failures.
Code Breakdown
@extension_whitelist ~w(.jpg .jpeg .gif .png .pdf)
The @
symbol means that is a module attribute, that can be used as a constant throughout our module.
The ~w sigil is used to generate lists of words(words are just regular strings). Inside the ~w sigil, words are separated by whitespace.
Path.extname(path)
Returns the extension of the last component of the path of a string.
Enum.member?(list, element)
Checks if an element exists within the list.
Conclusion
That's a pretty simple and straightforward way to validate a file format, by getting the extension from the string with Path.extname(path)
and passing it to Enum.member?(list, element)
along with a whitelisted list of allowed file extensions. Thank you so much for your time, I really appreciate it.
Posted on January 19, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.