@dandltech/minio-client
v0.0.5
Published
Uma biblioteca npm para upload de imagens usando MinIO/S3 que retorna o link de acesso
Maintainers
Readme
MinIO Client
Uma biblioteca npm simples e eficiente para upload de imagens usando MinIO/S3 que retorna o link de acesso.
🚀 Recursos
- ✅ Upload de imagens para MinIO/S3
- ✅ Validação de tipos de arquivo de imagem
- ✅ Validação de tamanho máximo
- ✅ Suporte para Node.js (Buffer, caminho de arquivo) e Browser (File object)
- ✅ Geração automática de nomes únicos
- ✅ URLs assinadas com expiração configurável
- ✅ TypeScript com tipagem completa
- ✅ Metadados personalizáveis
📦 Instalação
npm install @rodrigofroes/minio-client🔧 Configuração
Primeiro, configure suas credenciais do MinIO/S3:
import { MinioConfig } from "@rodrigofroes/minio-client";
const minioConfig: MinioConfig = {
endPoint: "localhost", // ou seu endpoint S3/MinIO
port: 9000,
accessKey: "your-access-key",
secretKey: "your-secret-key",
useSSL: false, // true para HTTPS
region: "us-east-1", // opcional
};📝 Uso
Upload Simples
import { ImageUploader, uploadImage } from "@rodrigofroes/minio-client";
// Usando a classe ImageUploader
const uploader = new ImageUploader(minioConfig);
const result = await uploader.uploadImage({
bucketName: "my-images",
file: "/path/to/image.jpg", // ou Buffer, ou File object
});
console.log("URL da imagem:", result.url);
console.log("Nome do objeto:", result.objectName);
console.log("Tamanho:", result.size);
// Ou usando a função de conveniência
const result2 = await uploadImage(minioConfig, {
bucketName: "my-images",
file: imageBuffer,
maxSizeInMB: 5, // Tamanho máximo de 5MB
});Upload no Browser
// HTML
<input type="file" id="imageInput" accept="image/*" />
<button onclick="uploadImage()">Upload</button>
// JavaScript
async function uploadImage() {
const fileInput = document.getElementById('imageInput');
const file = fileInput.files[0];
if (!file) {
alert('Selecione uma imagem');
return;
}
try {
const result = await uploadImage(minioConfig, {
bucketName: 'user-images',
file: file,
maxSizeInMB: 10
});
console.log('Upload realizado com sucesso!');
console.log('URL:', result.url);
} catch (error) {
console.error('Erro no upload:', error.message);
}
}Upload com Metadados Personalizados
const result = await uploader.uploadImage({
bucketName: "my-images",
file: imageBuffer,
objectName: "profile-picture.jpg", // Nome personalizado
contentType: "image/jpeg",
metadata: {
"user-id": "12345",
"upload-source": "mobile-app",
"image-category": "profile",
},
maxSizeInMB: 2,
});Gerenciamento de URLs
// Gerar URL com expiração personalizada (padrão: 24 horas)
const url = await uploader.getImageUrl("my-images", "image.jpg", 3600); // 1 hora
// Remover imagem
await uploader.removeImage("my-images", "image.jpg");🎯 Tipos de Arquivo Suportados
.jpg/.jpeg- JPEG.png- PNG.gif- GIF.webp- WebP.bmp- BMP.svg- SVG
⚙️ Opções de Configuração
MinioConfig
| Propriedade | Tipo | Obrigatório | Descrição |
| ------------- | ------- | ------------ | --------------------------- |
| endPoint | string | ✅ | Endpoint do MinIO/S3 |
| port | number | ✅ | Porta do serviço |
| accessKey | string | ✅ | Chave de acesso |
| secretKey | string | ✅ | Chave secreta |
| useSSL | boolean | ❌ | Usar HTTPS (padrão: false) |
| region | string | ❌ | Região do bucket |
UploadOptions
| Propriedade | Tipo | Obrigatório | Descrição |
| --------------- | ----------------------- | ------------ | ------------------------------------------------------ |
| bucketName | string | ✅ | Nome do bucket |
| file | Buffer| File | string | ✅ | Arquivo para upload |
| objectName | string | ❌ | Nome personalizado (gerado automaticamente se omitido) |
| contentType | string | ❌ | Tipo MIME (detectado automaticamente) |
| metadata | object | ❌ | Metadados personalizados |
| maxSizeInMB | number | ❌ | Tamanho máximo em MB (padrão: 10) |
🛠️ Desenvolvimento
# Instalar dependências
npm install
# Compilar
npm run build
# Desenvolvimento com watch
npm run dev
# Limpar arquivos compilados
npm run clean📄 Licença
MIT
🤝 Contribuindo
Contribuições são bem-vindas! Abra uma issue ou envie um pull request.
📞 Suporte
Se você encontrar algum problema ou tiver dúvidas, abra uma issue no GitHub.
