swiftjs-plugin-s3
AWS S3 cloud storage plugin for SwiftJS applications.
Installation
npm install swiftjs-plugin-s3
Usage
import { createApp } from 'swiftjs-core';
import { s3Plugin, getS3 } from 'swiftjs-plugin-s3';
const app = createApp();
app.register(s3Plugin({
region: 'us-east-1',
bucket: 'my-bucket',
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!
}
}));
app.post('/upload', async (ctx) => {
const s3 = getS3(ctx);
const result = await s3.upload('uploads/image.png', ctx.body.file, {
contentType: 'image/png',
acl: 'public-read'
});
return { url: result.location };
});
app.get('/download/:key', async (ctx) => {
const s3 = getS3(ctx);
const buffer = await s3.download(ctx.params.key);
return buffer;
});
app.get('/presign/:key', async (ctx) => {
const s3 = getS3(ctx);
const url = await s3.getSignedUrl(ctx.params.key, 3600);
return { url };
});
app.get('/files', async (ctx) => {
const s3 = getS3(ctx);
const result = await s3.list('uploads/', 100);
return result.objects;
});
app.listen();
S3-Compatible Storage
Works with any S3-compatible storage (MinIO, DigitalOcean Spaces, etc.):
app.register(s3Plugin({
region: 'us-east-1',
bucket: 'my-bucket',
endpoint: 'https://minio.example.com',
forcePathStyle: true
}));
API
s3Plugin(options)
Register the S3 plugin with your SwiftJS app.
getS3(ctx)
Get the S3 client from the request context.
S3Client Methods
upload(key, data, options?) | Upload a file |
download(key) | Download file as Buffer |
downloadStream(key) | Download file as ReadableStream |
delete(key) | Delete a file |
deleteMany(keys) | Delete multiple files |
exists(key) | Check if file exists |
getSignedUrl(key, expiresIn?) | Generate presigned download URL |
getSignedUploadUrl(key, expiresIn?, options?) | Generate presigned upload URL |
list(prefix?, maxKeys?, token?) | List files with prefix |
copy(sourceKey, destKey) | Copy a file |
License
MIT