Uma biblioteca para upload e gerenciamento de imagens com suporte a S3/Wasabi
npm install zeos-imagesUma biblioteca Node.js para upload e gerenciamento de imagens com suporte a S3/Wasabi.
``bash`
npm install zeos-images
`javascript
import { ZeosImages } from 'zeos-images';
const imageService = new ZeosImages({
endpoint: 'https://s3.us-west-1.wasabisys.com',
bucket: 'meu-bucket',
accessKey: 'SUA_ACCESS_KEY',
secretKey: 'SUA_SECRET_KEY',
region: 'us-west-1', // opcional
publicUrl: 'https://images.seusite.com', // opcional
uploadPath: 'uploads', // opcional
maxFileSize: 5 1024 1024, // opcional, padrão: 5MB
});
// Upload de arquivo
const result = await imageService.upload({
buffer: fileBuffer,
originalname: 'foto.jpg',
mimetype: 'image/jpeg',
size: fileBuffer.length
});
if (result.success) {
console.log('URL da imagem:', result.url);
} else {
console.error('Erro:', result.error);
}
// Obter arquivo
const file = await imageService.getFile('1234567890-foto.jpg');
// Deletar arquivo
await imageService.deleteFile('1234567890-foto.jpg');
`
`javascript
import express from 'express';
import { ZeosImages, createUploadRouter } from 'zeos-images';
const app = express();
const imageService = new ZeosImages({
endpoint: process.env.S3_ENDPOINT,
bucket: process.env.S3_BUCKET,
accessKey: process.env.S3_ACCESS_KEY,
secretKey: process.env.S3_SECRET_KEY,
publicUrl: 'https://images.seusite.com'
});
// Criar router com rotas pré-configuradas
const uploadRouter = createUploadRouter(imageService, {
uploadPath: '/upload', // POST /api/images/upload
getPath: '/uploads/:filename' // GET /api/images/uploads/:filename
});
app.use('/api/images', uploadRouter);
app.listen(3000, () => {
console.log('Servidor rodando na porta 3000');
});
`
`javascript
import express from 'express';
import { ZeosImages, createUploadMiddleware } from 'zeos-images';
const app = express();
const imageService = new ZeosImages({
endpoint: process.env.S3_ENDPOINT,
bucket: process.env.S3_BUCKET,
accessKey: process.env.S3_ACCESS_KEY,
secretKey: process.env.S3_SECRET_KEY
});
const upload = createUploadMiddleware({
maxFileSize: 10 1024 1024, // 10MB
blockedExtensions: ['.exe', '.bat', '.sh']
});
app.post('/upload', upload.single('file'), async (req, res) => {
const result = await imageService.upload(req.file);
if (result.success) {
res.json({ url: result.url });
} else {
res.status(400).json({ error: result.error });
}
});
`
#### Constructor
`javascript`
new ZeosImages(config)
| Parâmetro | Tipo | Obrigatório | Descrição |
|-----------|------|-------------|-----------|
| endpoint | string | ✅ | URL do endpoint S3/Wasabi |bucket
| | string | ✅ | Nome do bucket |accessKey
| | string | ✅ | Chave de acesso |secretKey
| | string | ✅ | Chave secreta |region
| | string | ❌ | Região (padrão: 'us-west-1') |publicUrl
| | string | ❌ | URL pública base para os arquivos |uploadPath
| | string | ❌ | Prefixo/pasta para uploads (padrão: 'uploads') |maxFileSize
| | number | ❌ | Tamanho máximo em bytes (padrão: 5MB) |blockedExtensions
| | string[] | ❌ | Extensões bloqueadas |
#### Métodos
##### upload(file)
Faz upload de um arquivo.
`javascript`
const result = await imageService.upload({
buffer: Buffer,
originalname: string,
mimetype: string,
size?: number
});
// Returns: { success: boolean, url?: string, error?: string }
##### getFile(filename)
Obtém um arquivo do storage.
`javascript`
const result = await imageService.getFile('filename.jpg');
// Returns: { success: boolean, data?: Object, error?: string }
##### deleteFile(filename)
Deleta um arquivo do storage.
`javascript`
const result = await imageService.deleteFile('filename.jpg');
// Returns: { success: boolean, error?: string }
##### isExtensionAllowed(filename)
Verifica se a extensão do arquivo é permitida.
`javascript`
const allowed = imageService.isExtensionAllowed('foto.jpg');
// Returns: boolean
Cria um middleware multer configurado.
`javascript`
const upload = createUploadMiddleware({
maxFileSize: 5 1024 1024,
blockedExtensions: ['.exe']
});
Cria um Express Router com rotas de upload pré-configuradas.
`javascript`
const router = createUploadRouter(imageService, {
uploadPath: '/upload',
getPath: '/uploads/:filename'
});
- .xll, .exe, .bat, .sh, .cmd, .com, .cpl, .msi.js
- , .php.svg
- , .html, .htm, .shtml, .xhtml
- Verificação de extensão de arquivo
- Verificação de tamanho máximo
- Verificação de conteúdo malicioso em SVGs (scripts, iframes, etc.)
`env``
S3_ENDPOINT=https://s3.us-west-1.wasabisys.com
S3_BUCKET=meu-bucket
S3_ACCESS_KEY=sua-access-key
S3_SECRET_KEY=sua-secret-key
S3_REGION=us-west-1
MIT