Uploading File to AWS S3 Bucket
Uploading a File To S3
Background
I ran across another common problem with my work project: how to upload a file to a private S3 bucket. In only an hour I was able to implement it after finding the exact right resources to learn from :)
How I Did It
The steps involved in the UI side are:
1 - Initialize API Gateway endpoint for uploading (see below link) 2 - Encode the file to Base64
const toBase64 = file => new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
const encoding = await toBase64(file).catch(e => console.log(e))
});
3 - Remove the content type heading from the encoding (in this case I am removing the metadata related to the Excel file I am trying to upload)
const b64 = encoding.replace("data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,", "")
const content = {
content: b64
}
4 - Write the AJAX async/async snippet to upload the base64-encoded file
try {
const res = await fetch(`${process.env.REACT_APP_API_ENDPOINT}/upload`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(content)
})
if (res.status === 200) {
// Using react-toastify to notify user
toast.success("🎉 Uploaded file successfully!", { autoClose: 5000 })
}
const { statusCode } = await res.json()
return statusCode === 200
}
catch (e) {
// Using react-toastify to notify user
toast.error('🔥 Upload error.', { autoClose: 5000 })
}