Skip to content

File Management

Basefloor provides comprehensive file management capabilities including upload, storage, processing, and serving of files.

Configuration

Configure file storage in your basefloor.config.js:

Local Storage

javascript
{
  files: {
    storage: {
      provider: 'local',
      local: {
        uploadDir: './uploads',
        publicPath: '/files'
      }
    }
  }
}

AWS S3 Storage

javascript
{
  files: {
    storage: {
      provider: 's3',
      s3: {
        bucket: process.env.AWS_BUCKET,
        region: process.env.AWS_REGION,
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
      }
    }
  }
}

File Upload

Upload files through the built-in file upload endpoints:

bash
# Upload a file
curl -X POST http://localhost:3000/files \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "file=@/path/to/your/file.pdf" \
  -F "description=My document"

File Processing

Basefloor supports various file processing capabilities:

  • Image resizing and optimization
  • Document format conversion (using LibreOffice)
  • PDF processing (using Ghostscript)
  • Audio transcription
  • File metadata extraction

File Model

The built-in Files model includes:

javascript
{
  _id: ['ObjectId', 'rud'],
  filename: ['String', 'cru'],
  originalname: ['String', 'cru'],
  mimetype: ['String', 'cru'],
  size: ['Number', 'cru'],
  path: ['String', 'cru'],
  url: ['String', 'r'],
  user_id: ['ObjectId', 'cru'],
  created_at: ['Date', 'r'],
  updated_at: ['Date', 'r']
}

Examples

Upload with Metadata

javascript
// Custom file upload with additional metadata
app.post('/upload', async (req, res) => {
  const file = await API.Files.create({
    ...req.file,
    category: req.body.category,
    tags: req.body.tags,
    user_id: req.user._id
  });
  
  res.json(file);
});

Image Processing

javascript
// Resize an image
const processedImage = await API.Files.process(fileId, {
  type: 'resize',
  width: 800,
  height: 600,
  format: 'jpeg'
});

Released under the MIT License.