Ensures all s3 sockets are cleaned up. Now passes through default request handler options that `@smithy/node-http-handler` now handles properly. Fixes #6382 ```ts const defaultRequestHandlerOpts: NodeHttpHandlerOptions = { httpAgent: { keepAlive: true, maxSockets: 100, }, httpsAgent: { keepAlive: true, maxSockets: 100, }, } ``` If you continue to have socket issues, you can customize any of the options by setting `requestHandler` property on your s3 config. This will take precedence if set. ```ts requestHandler: { httpAgent: { maxSockets: 300, keepAlive: true, }, httpsAgent: { maxSockets: 300, keepAlive: true, }, // Optional, only set these if you continue to see issues. Be wary of timeouts if you're dealing with large files. // time limit (ms) for receiving response. requestTimeout: 5_000, // time limit (ms) for establishing connection. connectionTimeout: 5_000, }), ```
S3 Storage for Payload
This package provides a simple way to use S3 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-s3
Usage
- Configure the
collectionsobject to specify which collections should use the AWS S3 adapter. The slug must match one of your existing collection slugs. - The
configobject can be anyS3ClientConfigobject (from@aws-sdk/client-s3). This is highly dependent on your AWS setup. Check the AWS documentation for more information. - 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. You must allow CORS PUT method for the bucket to your website.
import { s3Storage } from '@payloadcms/storage-s3'
import { Media } from './collections/Media'
import { MediaWithPrefix } from './collections/MediaWithPrefix'
export default buildConfig({
collections: [Media, MediaWithPrefix],
plugins: [
s3Storage({
collections: {
media: true,
'media-with-prefix': {
prefix,
},
},
bucket: process.env.S3_BUCKET,
config: {
credentials: {
accessKeyId: process.env.S3_ACCESS_KEY_ID,
secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
},
region: process.env.S3_REGION,
// ... Other S3 configuration
},
}),
],
})
Configuration Options
See the the AWS SDK Package and S3ClientConfig object for guidance on AWS S3 configuration.