Previously, if `addRandomSuffix` is set to true, the filename would be stored URL-encoded in the database: <img width="2212" height="140" alt="Screenshot 2025-09-08 at 18 47 50@2x" src="https://github.com/user-attachments/assets/1b001e30-0154-4764-a2e9-b7d8bf729581" /> If in addition to that, if you set `disablePayloadAccessControl: true`, Payload will url-encode the already url-encoded filename on read, leading to an error. This PR fixes this issue by always decoding the filename before storing it in the database, so that they're always stored unencoded, no matter if `addRandomSuffix` is set or not: <img width="1730" height="184" alt="Screenshot 2025-09-08 at 18 49 29@2x" src="https://github.com/user-attachments/assets/44328bfa-e489-4247-9e9b-7ddc6e271afb" /> --- - To see the specific tasks where the Asana app for GitHub is being used, see below: - https://app.asana.com/0/0/1211177878397844
Vercel Blob Storage for Payload
This package provides a simple way to use Vercel Blob storage with Payload.
NOTE: This package removes the need to use @payloadcms/plugin-cloud-storage as was needed in Payload 2.x.
Installation
pnpm add @payloadcms/storage-vercel-blob
Usage
- Configure the
collectionsobject to specify which collections should use the Vercel Blob adapter. The slug must match one of your existing collection slugs. - Ensure you have
BLOB_READ_WRITE_TOKENset in your Vercel environment variables. This is usually set by Vercel automatically after adding blob storage to your project. - When enabled, this package will automatically set
disableLocalStoragetotruefor each collection. - When deploying to Vercel, server uploads are limited with 4.5MB. Set
clientUploadstotrueto do uploads directly on the client.
import { vercelBlobStorage } from '@payloadcms/storage-vercel-blob'
import { Media } from './collections/Media'
import { MediaWithPrefix } from './collections/MediaWithPrefix'
export default buildConfig({
collections: [Media, MediaWithPrefix],
plugins: [
vercelBlobStorage({
enabled: true, // Optional, defaults to true
// Specify which collections should use Vercel Blob
collections: {
media: true,
'media-with-prefix': {
prefix: 'my-prefix',
},
},
// Token provided by Vercel once Blob storage is added to your Vercel project
token: process.env.BLOB_READ_WRITE_TOKEN,
}),
],
})
| Option | Description | Default |
|---|---|---|
enabled |
Whether or not to enable the plugin | true |
collections |
Collections to apply the Vercel Blob adapter to | |
addRandomSuffix |
Add a random suffix to the uploaded file name in Vercel Blob storage | false |
cacheControlMaxAge |
Cache-Control max-age in seconds | 365 * 24 * 60 * 60 (1 Year) |
token |
Vercel Blob storage read/write token | '' |
clientUploads |
Do uploads directly on the client to bypass limits on Vercel |