javascript|January 15, 2022|2 min read

Request Entity Too Large(413) - Uploading File with Formdata with Axios and Custom header

TL;DR

The 413 Request Entity Too Large error when uploading files via Axios with form-data is caused by incorrect Content-Length; let Axios compute headers automatically instead of manually setting them.

Request Entity Too Large(413) - Uploading File with Formdata with Axios and Custom header

Introduction

I was trying to upload images to my backend using rest APIs. I was using form-data library with axios, so that I can pass authorization header as well.

I was getting error: Request Entity Too Large, with http Status of 413.

Earlier Code was:

const FormData = require("form-data");

const filepath = 'my-filepath';
let fileToUpload = new FormData();
fileToUpload.append("files", fs.createReadStream(filepath));

await axios.post(
    `${this._props.host}/upload`,
    fileToUpload,
    {
        headers: {
            Authorization: `Bearer ${this._jwt}`
        },
    }
);

Error:

Request failed with status code 413

Solution

You need to pass a header Content-Type with value of multipart/form-data; and a unique boundary. When using form-data library. It also gives you a method: getHeaders().

The code becomes:

const FormData = require("form-data");

const filepath = 'my-filepath';
let fileToUpload = new FormData();
fileToUpload.append("files", fs.createReadStream(filepath));

await axios.post(
    `${this._props.host}/upload`,
    fileToUpload,
    {
        headers: {
            ...fileToUpload.getHeaders(),
            Authorization: `Bearer ${this._jwt}`
        },
    }
);

If you print fileToUpload.getHeaders(), you will get

'content-type': 'multipart/form-data; boundary=--------------------------151840689896304164188529'

And, it works.

What is Unique Boundary

In simple terms, you know that the server knows that multiple parameters are separated by an ampersand (&) character. And, if user need to pass the ampersand (&) character in the request parameters, then it have to be encoded.

But, how the server will know when to read the file data and when to stop (start and end) in the case of multipart/form-data.

It has to be similar to ampersand philosophy or contract.

This unique boundary is used for that purpose. It is to tell the server how to split the data it receives in multipart/form-data. So, what is unique about it. This value has to be unique in the request. i.e. It should not come within the content of the request or the payload.

Related Posts

Authenticating Strapi backend with Next.js and next-auth using credentials and jwt

Authenticating Strapi backend with Next.js and next-auth using credentials and jwt

Introduction Strapi is a backend system provides basic crud operations with…

Nextjs - Fixing Loading External Images and Issue of Url Paramater Not Allowed

Nextjs - Fixing Loading External Images and Issue of Url Paramater Not Allowed

Introduction In this post, we will see How to load external images to your next…

Nextjs - How to Build Next.js Application on Docker and Pass API Url

Nextjs - How to Build Next.js Application on Docker and Pass API Url

Introduction In this post we will see: How to prepare a docker image for your…

Nextjs - How to Redirect to Another Page and Pass State

Nextjs - How to Redirect to Another Page and Pass State

Introduction We have a page, for example a . And, upon submission we would want…

How to use Draft.js WYSWYG with Next.js and Strapi Backend, Edit/Update Saved Article

How to use Draft.js WYSWYG with Next.js and Strapi Backend, Edit/Update Saved Article

Introduction This post is in contuation of our previous post: How to use Draft…

How to use Draft.js WYSWYG with Next.js and Strapi Backend, Create and View Article with Image Upload

How to use Draft.js WYSWYG with Next.js and Strapi Backend, Create and View Article with Image Upload

Introduction In this post, we will use in Next.js with strapi. And, we will…

Latest Posts

Claude Code Skills — Build a Better Engineering Workflow with AI-Powered Code Reviews, Security Scans, and More

Claude Code Skills — Build a Better Engineering Workflow with AI-Powered Code Reviews, Security Scans, and More

Most developers use Claude Code like a search engine — ask a question, get an…

Building an AI Voicebot for Visitor Check-In — A Practical Guide to Handling the Messy Parts

Building an AI Voicebot for Visitor Check-In — A Practical Guide to Handling the Messy Parts

Every office lobby has the same problem: a visitor walks in, nobody’s at the…

Server Security Best Practices — Complete Hardening Guide for Production Systems

Server Security Best Practices — Complete Hardening Guide for Production Systems

Every breach post-mortem tells the same story: an unpatched service, a…

Staff Engineer Study Plan for MAANG Interviews — The Complete 12-Week Roadmap

Staff Engineer Study Plan for MAANG Interviews — The Complete 12-Week Roadmap

If you’re a Senior Engineer (L5) preparing for Staff (L6+) roles at MAANG…

XSS and CSRF Explained — The Complete Guide with Real Attack Examples and Defenses

XSS and CSRF Explained — The Complete Guide with Real Attack Examples and Defenses

XSS and CSRF have been in the OWASP Top 10 for over a decade. They’re among the…

OWASP Top 10 (2021) — Every Vulnerability Explained with Code

OWASP Top 10 (2021) — Every Vulnerability Explained with Code

The OWASP Top 10 is the industry standard for web application security risks. If…