# How to Upload and Store Files with Vercel

**Author:** Rich Haines

---

Uploading and storing files from the browser (e.g. images) is a common requirement for applications. If you are using a [Headless CMS](https://vercel.com/guides/using-a-headless-cms-with-vercel), it might offer file storage built-in. Otherwise, you'll need a file storage provider.

When dealing with large files or images, uploading using a presigned `POST` helps shift processing from your server to your provider. For example, you can:

1. Create a [Serverless Function](https://vercel.com/docs/concepts/functions/serverless-functions) to return a [presigned URL](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#createPresignedPost-property).
   
2. From the front-end, call your [Serverless Function](https://vercel.com/docs/concepts/functions/serverless-functions) to get the presigned `POST` URL.
   
3. Allow the user to upload a file on the front-end.
   
4. Forward the file to the `POST` URL.
   

## Vercel Storage Solutions

You can use [**Vercel Blob**](https://vercel.com/docs/storage/vercel-blob) for file storage. Vercel Blob allows you to upload and serve files via a global network through unique and unguessable URLs.

See [our docs](https://vercel.com/docs/storage/vercel-blob#using-vercel-blob-in-your-workflow) to learn how to integrate Vercel Blob into your workflow.

## Other Providers

The following guide and project show Next.js applications using presigned URLs to upload images:

- [Amazon Web Services (AWS) S3](https://vercel.com/guides/how-can-i-use-aws-s3-with-vercel)
  
- [Google Cloud Storage Bucket](https://github.com/leerob/nextjs-gcp-storage)

---

[View full KB sitemap](/kb/sitemap.md)
