Overview
The FormData
object provides a way to construct a set of key-value pairs representing form fields and their values.
Example code
<form id="example-form">
<div>
<label for="name">Name:</label>
<input type="text" id="name" name="name" placeholder="Enter name" />
</div>
<div>
<label for="email">Email:</label>
<input type="text" id="email" name="email" placeholder="Enter address" />
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" name="password" placeholder="Enter password" />
</div>
<div>
<label for="file">Image:</label>
<input type="file" id="file" name="file" placeholder="Enter email" />
</div>
<div>
<button type="submit" id="submit">Submit</button>
</div>
</form>
This article explains FormData object together with above HTML code.
Use with HTML form
element
const exampleForm = document.getElementById('example-form')
const formData = new FormData(exampleForm)
FormData
Object automatically read all fields in HTML form
element.
Use without HTML form
element
const name = document.getElementById('name')
const email = document.getElementById('email')
const password = document.getElementById('password')
const file = document.getElementById('file')
const formData = new FormData()
formData.append('name', name.value)
formData.append('email', email.value)
formData.append('password', password.value)
formData.append('file', file.files[0], file.files[0].name)
formData.append('isNotAuto', '1')
Declare an empty FormData
object. Fill the key-values by using its method append
which will be explained at next section.
Method
FormData
Object provides many useful methods.
append(key, value)
Add a new key-value pair to FormData
object.
formData.append('name', 'my awesome name')
append(key, blob, fileName)
Add a new key-value pair to FormData
object. This method is used for file. The third argument takes name of file. It will be a binary type.
formData.append('file', file.files[0], fi le.files[0].name)
delete(key)
Remove the specific field by key.
formData.delete('name')
get(key)
Get the first value within a FormData
object by key.
If there is no value by key, it returns ''
.
If there is no field by key, it returns null
.
formData.get('name')
getAll(key)
It returns array of values whose key matches the specific key. Otherwise, an empty list
formData.append('name', 'name 1')
formData.append('name', 'name 2')
formData.getAll('name') // Returns ["name 1", "name 2"]
has(key)
if there exists a field by key, returns true, otherwise false.
formData.has('name')
set(key, value)
Set a new value for an existing key inside a FromData
object. If there is no key, add a key-value pair to FormData
object.
formData.has('name', 'my new name')
set(key, blob, fileName)
Set a new value for an existing key inside a FromData
object. If there is no key, add a key-value pair to FormData
object.
The third argument takes name of file. It will be a binary type.
formData.append('file', file.files[0], file.files[0].name)
Send FormData
Object via Fetch
const response = await fetch('/api/example', {
method: 'POST',
body: formData
})
const result = await response.json()
console.log(result)
The form is always sent as Content-Type: multipart/form-data
which can be seen in Header. It is an encoding which allows to send files.
const response = await fetch('/api/example', {
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data'
},
body: formData
})
const result = await response.json()
console.log(result)
If you would like to add Content-type explicitly, add Content-Type: multipart/form-data
into Header.