web-dev-qa-db-fra.com

Différence entre upload () et putObject () pour télécharger un fichier sur S3?

Dans la classe S3 De l'aws-sdk, quelle est la différence entre upload() et putObject() ? Ils semblent faire la même chose. Pourquoi pourrais-je préférer l'un à l'autre?

42
callum

La différence entre l'utilisation du kit AWS SDK upload() et putObject() est la suivante:

  • Si le MD5 signalé après la fin du téléchargement ne correspond pas, il tente à nouveau.
  • Si la taille du fichier est suffisante, il utilise le téléchargement en plusieurs parties pour télécharger des parties en parallèle.
  • Réessayer en fonction des paramètres de réessai du client.
  • Vous pouvez utiliser pour les rapports d'avancement.
  • Définit le ContentType en fonction de l'extension de fichier si vous ne le fournissez pas.
27
error2007s

upload() vous permet de contrôler le chargement de votre objet. Par exemple, vous pouvez définir la concurrence et la taille de la pièce.

Depuis leur docs : télécharge un tampon, un blob ou un flux de taille arbitraire, en utilisant une gestion intelligente simultanée des pièces si la charge utile est suffisamment grande.

Un avantage spécifique que j'ai découvert est que upload() acceptera un flux sans longueur de contenu définie, alors que putObject() ne le fera pas.

Cela était utile car j'avais un point de terminaison API qui permettait aux utilisateurs de télécharger un fichier. La structure a livré le fichier à mon contrôleur sous la forme d'un flux lisible sans longueur de contenu. Au lieu de devoir mesurer la taille du fichier, tout ce que j'avais à faire était de le transmettre directement à l'appel upload().

24
rlay3

En cherchant la même information, je suis tombé sur: https://aws.Amazon.com/blogs/developer/uploading-files-to-Amazon-s3/

Cette source est un peu datée (référençant à la place upload_file() et put() - ou peut-être s'agit-il du Ruby SDK?), Mais cela ressemble au putObject() est destiné aux objets plus petits que upload().

Il recommande upload() et précise pourquoi:

C'est la méthode recommandée d'utilisation du SDK pour télécharger des fichiers dans un compartiment. L'utilisation de cette approche présente les avantages suivants:

  • Gère les téléchargements en plusieurs parties pour des objets supérieurs à 15 Mo.
  • Ouvre correctement les fichiers en mode binaire pour éviter les problèmes d’encodage.
  • Utilise plusieurs threads pour télécharger des parties d'objets volumineux en parallèle.

Puis couvre l’opération putObject():

Pour les objets plus petits, vous pouvez choisir d'utiliser #put À la place.

EDIT: J'avais des problèmes avec l'opération .abort() sur mon .upload() et j'ai trouvé ceci utile: annuler/arrêter le téléchargement Amazon aws s3, le script aws sdk

Maintenant, mes différents autres événements de https://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html se déclenchent également! Avec .upload() je n'avais que 'httpUploadProgress'.

4
Doug