[File Format Verification] With Elixir

[File Format Verification] With Elixir

Anthony Gonzalez's photo
Anthony Gonzalez
·Jan 19, 2022·

2 min read

Subscribe to my newsletter and never miss my upcoming articles

   

   

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.

   

Join The Elixir Army

 
Share this