API Reference/Storage API
File Operations
Complete guide to file listing, metadata, and delete operations
File Operations
List Operations
Basic File Listing
// List all files
const files = await storage.list.files()
// List with options
const files = await storage.list.files({
prefix: 'uploads/',
maxResults: 50,
sortBy: 'lastModified',
sortOrder: 'desc'
})
Paginated Listing
// Get first page
const result = await storage.list.paginated({
maxResults: 20,
prefix: 'images/'
})
console.log(result.files) // FileInfo[]
console.log(result.hasMore) // boolean
console.log(result.nextToken) // string | undefined
// Get next page
if (result.hasMore) {
const nextPage = await storage.list.paginated({
maxResults: 20,
prefix: 'images/',
continuationToken: result.nextToken
})
}
Filtered Listing
// By file extension
const images = await storage.list.byExtension('jpg', 'photos/')
const pdfs = await storage.list.byExtension('pdf')
// By file size (bytes)
const largeFiles = await storage.list.bySize(1024 * 1024) // > 1MB
const mediumFiles = await storage.list.bySize(100000, 1024 * 1024) // 100KB - 1MB
// By date range
const recent = await storage.list.byDate(
new Date('2024-01-01'),
new Date('2024-12-31')
)
Directory Listing
// List "directories" (common prefixes)
const dirs = await storage.list.directories('uploads/')
// Returns: ['uploads/images/', 'uploads/documents/', 'uploads/videos/']
Async Generator (Large Datasets)
// Process large datasets efficiently
for await (const batch of storage.list.paginatedGenerator({ maxResults: 100 })) {
console.log(`Processing ${batch.files.length} files`)
// Process batch...
}
Metadata Operations
Single File Info
const info = await storage.metadata.getInfo('uploads/image.jpg')
console.log(info.key) // 'uploads/image.jpg'
console.log(info.size) // 1024000
console.log(info.contentType) // 'image/jpeg'
console.log(info.lastModified) // Date object
console.log(info.etag) // '"abc123..."'
Batch Metadata
const keys = ['file1.jpg', 'file2.pdf', 'file3.mp4']
const results = await storage.metadata.getBatch(keys)
results.forEach(result => {
if (result.success) {
console.log(result.info.size)
} else {
console.log(result.error)
}
})
Specific Metadata
// Get individual properties
const size = await storage.metadata.getSize('file.jpg')
const contentType = await storage.metadata.getContentType('file.jpg')
const lastModified = await storage.metadata.getLastModified('file.jpg')
// Custom metadata
const customMeta = await storage.metadata.getCustom('file.jpg')
await storage.metadata.setCustom('file.jpg', {
userId: '123',
category: 'profile-image'
})
Delete Operations
Single File Delete
const result = await storage.delete.file('uploads/old-file.jpg')
if (result.success) {
console.log('File deleted successfully')
} else {
console.log('Delete failed:', result.error)
}
Batch Delete
const keys = ['file1.jpg', 'file2.pdf', 'file3.mp4']
const result = await storage.delete.files(keys)
console.log(`Deleted: ${result.deleted.length}`)
console.log(`Failed: ${result.errors.length}`)
// Check individual results
result.errors.forEach(error => {
console.log(`Failed to delete ${error.key}: ${error.message}`)
})
Delete by Prefix (Folder-like)
// Delete all files with prefix
const result = await storage.delete.byPrefix('temp-uploads/')
console.log(`Deleted ${result.deletedCount} files`)
// With options
const result = await storage.delete.byPrefix('old-files/', {
dryRun: true, // Preview only, don't delete
batchSize: 500, // Process in batches
maxFiles: 1000 // Limit total files
})
if (result.dryRun) {
console.log(`Would delete ${result.totalFiles} files`)
}
Validation Operations
File Existence
// Simple existence check
const exists = await storage.validation.exists('file.jpg')
// Existence with metadata
const result = await storage.validation.existsWithInfo('file.jpg')
if (result.exists) {
console.log('File size:', result.info.size)
}
File Validation
// Validate single file
const result = await storage.validation.validateFile('image.jpg', {
max: "5MB",
types: ['image/jpeg', 'image/png'],
min: "1KB"
})
if (result.valid) {
console.log('File is valid')
} else {
console.log('Validation errors:', result.errors)
}
// Validate multiple files
const results = await storage.validation.validateFiles(
['file1.jpg', 'file2.png'],
{ max: "10MB" }
)
Connection Validation
// Test S3 connection and permissions
const isHealthy = await storage.validation.connection()
console.log('S3 connection:', isHealthy ? 'OK' : 'Failed')
Type Definitions
interface FileInfo {
key: string
size: number
contentType: string
lastModified: Date
etag: string
metadata?: Record<string, string>
}
interface ListFilesOptions {
prefix?: string
maxResults?: number
sortBy?: 'key' | 'size' | 'lastModified'
sortOrder?: 'asc' | 'desc'
}
interface ValidationRules {
max?: string | number
min?: string | number
types?: string[]
requiredMetadata?: string[]
}