How can I create custom error page or function of Plug.Parsers

Hello, I need to create a custom massage or page for Sending large request, for example if my user sends a file larger than 2 mg, my code shows them a page or redirect or something except default massage,

I have edited this line in endpoint.ex

  plug Plug.Parsers,
    parsers: [:urlencoded, :multipart, :json],
    pass: ["*/*"],
    body_reader: {WeddingCardWeb.DashboardController, :body_of_upload, []},
    json_decoder: Phoenix.json_library()

and my functions in my controller is:

  def body_of_upload(conn, _opts) do
    |> put_flash(:error, "متاسفانه فایل ارسالدر مواردی مثل حجم و فرمت مجاز دارای مشکل می باشد.")
    |> redirect(to: "/dashboard")

but it doesn’t work.

By the way, can I create a preventer to limit my user sending upload file in my function:

  def upload(conn, params) do
      with {:ok, user_id} <- check_session(conn, :user_login_id), {:ok, invoice_id_valid} <- Ecto.UUID.cast(params["invoice_id"]),
           {:ok, user_infos} <- WeddingCardWeb.LoginController.user_find_pattern(user_id), true <- user_infos.status,
           {:ok, invoice_info}  <- invoice_pattern_by_id(invoice_id_valid),
           {:ok, :belong_user} <- invoice_belong_user_pattern(user_id, invoice_info.wedding_user_id),
           {:ok, upload} <- upload_check(params["upload"]), {:ok, [file_name]} <- file_name_reader(upload),
           true <- validate_file(file_name),
           nil <- WeddingCard.DB.UploadQuery.get_upload_by_invoice_id(  do

           [%{file_size: size, file_name: name_of_file}] = config_file(upload)
             # Store in db
                 "wedding_user_id" =>,
                 "wedding_invoice_id" =>,
                 "size" => "#{size}",
                 "address" => "#{name_of_file}"
             |> put_flash(:info, "فایل شما با موفقیت آپلود گردید")
             |> redirect(to: "/dashboard")
        _ ->
          |> put_flash(:error, "متاسفانه فایل مذکور ارسال نگردید یا در فرمت و حجم مناسب نبوده است. توجه فرمایید شما فقط مجاز به ارسال  فایل برای یک بار هستید.")
          |> redirect(to: "/dashboard")

all the functions I called top in my function, they work after uploaded file!!!

for example:

  def validate_file(filename) do
    ~w(.jpg .jpeg .xlsx .png .JPG .pdf .docx) |> Enum.member?(Path.extname(filename))

it works after uploading, but the file concerned is bigger than my limitation, and my project shows me a default massage like this that I don’t want it.

Request Entity Too Large


If you are using Phoenix, you can customize the error pages in the MyApp.ErrorView module. Request Entity Too Large has the status code of 413.

1 Like

Thank you, but how can I do this in my function that receives upload file ?

Hello, is there any option which helps me to handle error in my controller function ?