Se você estiver usando o Node.js para construir projetos da web “genéricos” (como este ), provavelmente você precisará processar e armazenar imagens carregadas pelo usuário em algum ponto.
Embora o ImageMagick funcione perfeitamente na maioria dos provedores de PaaS, normalmente o espaço do sistema de arquivos “local” é volátil, então você precisa criar seu próprio espaço / estratégia para armazenar imagens ou outro tipo de ativos gerados pelo usuário. Existem, é claro, soluções de gerenciamento de imagens com todos os recursos na nuvem – Cloudinary sendo talvez a mais conhecida no momento.
Mas se você está procurando uma alternativa realmente barata (mas muito confiável), deve dar uma olhada no clássico Amazon S3 . Existem alguns módulos Node.js por aí e tentei alguns deles, mas no final acabei trabalhando com aws-sdk , o “oficial”.
Embora inicialmente tenha ficado um pouco desconcertado com o estilo de documentação detalhado, no final eu achei muito fácil de usar.
Você pode configurá-lo assim ( código IcedCoffeeScript ):
aws = require 'aws-sdk'
env = process.env
aws.config.update
accessKeyId: env.S3_KEY
secretAccessKey: env.S3_SECRET
region: env.S3_REGION
s3 = new aws.S3
E aqui está um método de exemplo para fazer upload de um arquivo local (temporário):
exports.upload = (tempFilePath, callback) ->
fileName = path.basename tempFilePath
await fs.readFile tempFilePath, defer err, data
return callback err if err
await
s3.putObject
Bucket: env.S3_BUCKET
Key: "pictures/#{fileName}"
ContentType: 'image/jpg'
CacheControl: 'max-age=31536000' # 1 year
Body: data
, defer err
return callback err if err
await fs.unlink tempFilePath, defer err
callback err
Não é exatamente ciência de foguetes, é? …