3 votes

bonne pratique pour télécharger un fichier vers s3 en utilisant nodejs la scalabilité et la performance doivent être prises en compte

J'ai utilisé multer pour télécharger un fichier dans s3 et j'ai essayé trois méthodes pour télécharger un fichier dans s3

  1. mémoireStorage (par défaut)
  2. *Moteur S3stroage personnalisé (en stramant directement le fichier depuis la requête et en le téléchargeant sur s3)
  3. Diskstroage (par défaut)

dans mon cas, le deuxième La première approche est bonne en termes de performance mais je pense qu'elle n'est pas très évolutive. La deuxième méthode permet de gagner beaucoup de temps (au lieu d'écrire sur le disque et de diffuser à partir de là, c'est beaucoup plus simple).

5voto

Yman Points 491

Vous devriez envisager d'utiliser URL pré-signée S3

Ainsi, au lieu d'utiliser votre instance comme intermédiaire pour la transaction, créez une API qui permet au client de récupérer les informations suivantes une url unique éphémère (s3 direct) que le client peut utiliser pour télécharger le fichier directement à l'emplacement souhaité dans S3 sans passer par votre instance. Je pense que cela est plus évolutif que vos solutions existantes.

Cependant, il y a une mise en garde. Votre url pré-signée (comme son nom l'indique) est "pré-authentifiée", soyez prudent en servant cette information à votre client, et assurez-vous que l'url est suffisamment courte pour éviter d'autres abus.

En outre, vous pouvez avoir besoin d'une implémentation supplémentaire de l'écoute des événements S3 si vous voulez être informé lorsque les fichiers sont téléchargés avec succès vers le stockage. Voir https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html

4voto

Mikias Abebe Points 115

L'aws-cli est excellent mais si vous êtes préoccupé par la mise à l'échelle, vous pouvez utiliser des travailleurs en arrière-plan pour télécharger vos fichiers vers s3. Tout d'abord, enregistrez le fichier sur DiskStorage et ajoutez un travail à la file d'attente pour le processus en arrière-plan qui télécharge le fichier vers aws-s3. Cette méthode vous permet de réessayer le téléchargement en cas d'échec et de le supprimer une fois qu'il a été téléchargé, ce qui vous laisse plus d'espace libre. vous pouvez essayer taureau (système de file d'attente).

-1voto

Jin Thakur Points 553

Utiliser le sdk d'aws. Il est rapide et sûr. https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-creating-buckets.html

vous n'avez pas besoin d'une url présignée pour télécharger un fichier. je ne sais pas pourquoi cela répond à une question.

Toujours lire à partir du stockage sur disque Diskstroage(par défaut). Si le fichier n'est pas lu complètement, vous pouvez le réessayer. Vérifiez ces échantillons github

    // Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region 
AWS.config.update({region: 'REGION'});

// Create S3 service object
s3 = new AWS.S3({apiVersion: '2006-03-01'});

// call S3 to retrieve upload file to specified bucket
var uploadParams = {Bucket: process.argv[2], Key: '', Body: ''};
var file = process.argv[3];

// Configure the file stream and obtain the upload parameters
var fs = require('fs');
var fileStream = fs.createReadStream(file);
fileStream.on('error', function(err) {
  console.log('File Error', err);
});
uploadParams.Body = fileStream;
var path = require('path');
uploadParams.Key = path.basename(file);

// call S3 to retrieve upload file to specified bucket
s3.upload (uploadParams, function (err, data) {
  if (err) {
    console.log("Error", err);
  } if (data) {
    console.log("Upload Success", data.Location);
  }
});
To run the example, type the following at the command line.

node s3_upload.js BUCKET_NAME FILE_NAME

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X