Armazenamento de arquivos
O AdonisJs tem um Drive Provider dedicado construído sobre o Flydrive para interagir com sistemas de arquivos locais e remotos como o Amazon S3.
Neste guia, aprendemos como configurar e usar o Drive Provider.
Configuração
Como o Drive Provider não é instalado por padrão, precisamos obtê-lo do npm:
adonis install @adonisjs/driveEm seguida, precisamos registrar o provedor dentro do arquivo start/app.js:
// .start/app.js
const providers = [
'@adonisjs/drive/providers/DriveProvider'
]NOTA
A configuração do driver é salva dentro do arquivo config/drive.js, que é criado pelo comando adonis install ao instalar o Drive Provider.
Drivers disponíveis
Os drivers padrão enviados com o Drive Provider são:
- Amazon S3 (
s3), que requer o pacote aws-sdk - DigitalOcean Spaces (
spaces), que requer o pacote aws-sdk - Sistema de arquivos local (
local)
Exemplo básico
Aqui está um exemplo básico de como interagir com o disco local via adonis repl:

Drive API
Embora operações comuns como leitura e escrita permaneçam as mesmas em todos os drivers, a API de uma unidade é baseada principalmente no driver que você está usando para interagir com o sistema de arquivos dessa unidade.
exists(relativePath)
Descubra se um arquivo/diretório existe ou não:
const exists = await Drive.exists('unicorn.jpg')get(relativePath, encoding = utf-8)
Obtenha o conteúdo do arquivo como um buffer ou string:
const unicorn = await Drive.get('unicorn.jpg')getStream(relativePath)
Obtenha o arquivo como um fluxo:
Drive.getStream('hello.txt')put(relativePath, content, options = {})
Crie um novo arquivo com o conteúdo fornecido (crie todos os diretórios ausentes):
await Drive.put('hello.txt', Buffer.from('Hello world!'))prepend(relativePath, content, options = {})
Adicione o conteúdo a um arquivo (crie um novo arquivo se o caminho não exist):
await Drive.prepend('hello.txt', Buffer.from('Prepended!'))NOTA
O método prepend funciona apenas com o driver local.
append(relativePath, content, options = {})
Acrescenta conteúdo a um arquivo (cria um novo arquivo se o caminho não existir):
await Drive.append('hello.txt', Buffer.from('Appended!'))NOTA
O método append funciona apenas com o driver local.
delete(relativePath)
Remover arquivo existente:
await Drive.delete('hello.txt')move(src, dest, options = {})
Mover arquivo de um diretório para outro:
await Drive.move('hello.txt', 'hi.txt')copy(src, dest, options = {})
Copiar arquivo de um diretório para outro:
await Drive.copy('hi.txt', 'hello.txt')API S3/Spaces
Os métodos a seguir funcionam apenas para os drivers s3 e spaces.
getObject(location, params)
Obter objeto S3 para um arquivo fornecido (para informações sobre params, consulte S3 params):
await Drive.disk('s3').getObject('unicorn.jpg')getUrl(location, [bucket])
Obter url para um arquivo fornecido (aceita parâmetro alternativo opcional bucket):
const url = Drive.disk('s3').getUrl('unicorn.jpg')getSignedUrl(location, expiry = 900, params)
Obter url assinada para um arquivo fornecido (expiração definida como 15mins por padrão):
const url = await Drive.disk('s3').getSignedUrl('unicorn.jpg')