Primeiro, instale a biblioteca aws-sdk:
npm install aws-sdk
Importe-o em seu código na parte superior do arquivo que você adicionará este upload de arquivo à funcionalidade do S3:
import AWS from ‘aws-sdk’
Em seguida, use o SDK para criar uma instância do objeto S3. Eu o atribuo a uma s3variável:
const s3 = new AWS.S3(
accessKeyId: process.env.AWS_S3_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_S3_SECRET_ACCESS_KEY,
)
Observe que eu uso duas variáveis de ambiente aqui: AWS_S3_ACCESS_KEY_IDe AWS_S3_SECRET_ACCESS_KEY.
Agora vem algum “trabalho administrativo”. Você precisa criar um perfil do IAM na AWS (as credenciais) com acesso programático com as permissões para AWSCloudFormationFullAccessee AmazonS3FullAccessum bucket do S3 ao qual esse usuário tem acesso.
Não abordarei esse aspecto aqui, pois você pode encontrar vários artigos e documentação sobre isso. Vou falar apenas sobre o código JavaScript que você precisa.
Agora, você precisa de um blob de imagem para fazer upload.
Você pode usar um URL como este:
const imageURL = ‘https://url-to-image.jpg’
const res = await fetch(imageURL)
const blob = await res.buffer()
ou você pode obter uma imagem enviada de um upload de campo de imagem de formulário em um formulário de várias partes ou uma imagem salva no disco:
const imagePath = req.files[0].path
const blob = fs.readFileSync(imagePath)
Finalmente, faça uma chamada s3.upload()e chame seu .promise()método para que você possa usar await para esperar até que ele termine de obter o objeto de arquivo carregado:
const uploadedImage = await s3.upload(
Bucket: process.env.AWS_S3_BUCKET_NAME,
Key: req.files[0].originalFilename,
Body: blob,
).promise()AWS_S3_BUCKET_NAMEé o nome do bucket do S3, outra variável de ambiente
Por fim, você pode obter o URL da imagem carregada no S3 referenciando a Locationpropriedade:
uploadedImage.Location
Você precisa definir o bucket do S3 como público para poder acessar o URL da imagem.
LEIA TAMBÉM: