Exporter des fichiers vers Amazon S3
🤖/s3/store exporte les résultats d’encodage vers Amazon S3.

Si vous découvrez Amazon S3, consultez notre tutoriel sur l’utilisation de votre propre bucket S3.
L’URL du fichier résultant dans votre bucket S3 sera renvoyée dans l’Assembly Status JSON. Une URL renvoyée ne rend pas public un objet privé et n’accorde pas d’accès en lecture. Si le versionnage est activé sur votre bucket S3, l’ID de version du fichier sera renvoyé dans meta.version_id.
Configurez explicitement les buckets privés. Le paramètre acl du Robot a toujours "public-read" comme valeur par défaut. Pour un bucket privé, définissez acl: "bucket-default" et ne fournissez pas d’en-têtes ACL ou d’octroi (grant). Cela omet l’en-tête ACL généré et fonctionne avec la propriété des objets (Object Ownership) en mode « Bucket owner enforced », où les ACL sont désactivées. Laissez S3 Block Public Access activé. Définir acl: "private" envoie tout de même une ACL et n’équivaut pas à son omission.
Utilisez des noms de bucket conformes au DNS. Suivez les règles de nommage des buckets d’AWS. Le paramètre url_prefix modifie les URL renvoyées ; il ne modifie ni le bucket ni ses autorisations d’accès.
Limiter l’accès
Utilisez une identité AWS dédiée dont l’accès est limité au bucket de destination et au préfixe d’objet. N’utilisez pas de clés d’accès root AWS. Stockez son ID de clé d’accès, sa clé d’accès secrète, le nom du bucket et la région sous les noms key, secret, bucket et bucket_region dans un ensemble d’informations d’identification de Template, puis indiquez le nom de cet ensemble d’informations d’identification avec credentials. Les intégrations backend de confiance peuvent à la place fournir ces paramètres directement ; n’exposez pas de secrets AWS dans des instructions côté navigateur.
Voici une stratégie IAM basée sur l’identité, attachée à cette identité dédiée, et non une stratégie de bucket. Elle ne contient volontairement aucun Principal. Remplacez {BUCKET_NAME} et utilisez pour le Robot un path commençant par uploads/, ou adaptez ensemble le préfixe de la stratégie et le chemin.
Cet exemple couvre les téléversements et le nettoyage des téléversements multipart ayant échoué, avec un paramètre bucket_region explicite, acl: "bucket-default", sans en-têtes ACL/grant, sans balises et avec un chiffrement géré par S3 (SSE-S3). Des stratégies de bucket existantes, des contrôles d’organisation ou des stratégies de point de terminaison peuvent tout de même refuser l’accès.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "UploadAndAbortWithinPrefix",
"Effect": "Allow",
"Action": ["s3:PutObject", "s3:AbortMultipartUpload"],
"Resource": "arn:aws:s3:::{BUCKET_NAME}/uploads/*"
}
]
}
Le module de téléversement utilise soit PutObject, soit CreateMultipartUpload, UploadPart et CompleteMultipartUpload ; les téléversements multipart ayant échoué peuvent déclencher AbortMultipartUpload. AWS associe les opérations de téléversement réussies à s3:PutObject. L’accès en écriture peut écraser une clé d’objet existante ; il ne se limite pas à l’ajout. Choisissez des chemins d’objet uniques et envisagez le versionnage pour pouvoir récupérer les données.
Ajoutez des autorisations uniquement pour les fonctionnalités que vous utilisez, en suivant la référence des autorisations par opération d’AWS :
- Sans paramètre
bucket_regionexplicite, la découverte de la région peut nécessiters3:GetBucketLocationet, en solution de repli,s3:ListBucketsur l’ARN du bucket,arn:aws:s3:::{BUCKET_NAME}, sans suffixe d’objet. Fournir la bonne région évite ces requêtes de découverte. - Les en-têtes ACL ou d’octroi nécessitent
s3:PutObjectAcl; les balises nécessitents3:PutObjectTaggingsur le préfixe d’objet autorisé.bucket-defaultne supprime pas les en-têtes ACL/grant que vous fournissez dansheaders. - Le téléchargement de résultats privés nécessite une autorisation de lecture distincte. Même pour une URL générée avec
sign_urls_for, l’identité de signature doit disposer des autorisations de lecture appropriées.
S3 applique sa configuration de chiffrement du bucket lorsqu’aucun remplacement du chiffrement n’est envoyé. Vous pouvez demander SSE-KMS via headers, en utilisant x-amz-server-side-encryption: aws:kms et x-amz-server-side-encryption-aws-kms-key-id. Lorsque le chiffrement par défaut du bucket ou les en-têtes de requête sélectionnent SSE-KMS, l’identité qui effectue le téléversement a besoin de kms:GenerateDataKey sur la clé concernée, ainsi que de kms:Decrypt pour les téléversements multipart. Pour une clé gérée par le client, accordez ces autorisations au moyen d’une stratégie de clé KMS compatible ; la stratégie S3 de base ci-dessus ne les inclut pas. N’accordez pas kms:* ou sts:* de manière générale.
Les informations d’identification AWS à courte durée de vie forment un ensemble cohérent de key, secret et session_token. Faites en sorte qu’un backend de confiance obtienne et actualise ces trois valeurs, puis les fournisse ensemble lorsqu’il crée l’Assembly. Il peut les transmettre directement dans les instructions du Robot, ou les enregistrer et les mettre à jour ensemble via l’API des informations d’identification de Template. Gardez ces trois valeurs hors des instructions côté navigateur ; remplacer uniquement le jeton de session n’actualise pas les clés d’accès expirées. Ce Robot transmet à S3 les informations d’identification fournies ; il n’assume pas de rôle et n’actualise pas les informations d’identification expirées. Veillez à ce que les informations d’identification temporaires restent valides pendant toute la durée du téléversement.
Exemple d’utilisation
Exporter les fichiers téléversés vers my_target_folder dans un bucket S3 :
{
"steps": {
"exported": {
"credentials": "YOUR_AWS_CREDENTIALS",
"path": "my_target_folder/${unique_prefix}/${file.url_name}",
"robot": "/s3/store",
"use": ":original"
}
}
}Paramètres
interpolateboolean | Record<string, boolean>Détermine si les Assembly Variables sont interpolées pour chaque champ d’instruction.
Par défaut, la plupart des champs d’instruction des Robots interpolent les Assembly Variables. Définissez ce paramètre sur
falsepour traiter tous les champs d’instruction comme du texte littéral, ou définissez le chemin d’un champ individuel surfalsepour traiter uniquement ce champ comme du texte littéral. Pour les champs propres à un Robot qui sont littéraux par défaut, définissez ce paramètre surtrueou définissez le chemin de ce champ surtruepour réactiver l’interpolation.Utilisez des noms de champs tels que
path, ou des chemins avec points tels queffmpeg.vfpour les objets imbriqués.output_metaRecord<string, boolean> | boolean | Array<string>Permet de spécifier un ensemble de métadonnées dont le calcul est plus coûteux en puissance CPU et qui sont donc désactivées par défaut afin que le traitement de vos Assemblies reste rapide.
Pour les images, vous pouvez ajouter
"has_transparency": truedans cet objet pour déterminer si l’image contient des parties transparentes, et"dominant_colors": truepour extraire de l’image un tableau de codes couleur hexadécimaux.Pour les images, vous pouvez également ajouter
"blurhash": truepour extraire une chaîne BlurHash — une représentation compacte d’un espace réservé pour l’image, utile pour afficher un aperçu flou pendant le chargement de l’image complète.Pour les images,
"thumbhash": trueextrait plutôt un ThumbHash encodé en base64 dansmeta.thumbhash, accompagné demeta.has_alpha(qui indique si un canal alpha existe, même lorsque l’image est entièrement opaque). Il décrit les pixels orientés selon les données EXIF et utilise la première image des images animées. L’extraction est effectuée au mieux : les images de plus de 40 mégapixels, les formats non pris en charge ou un décodage échoué ou limité ne produisent aucun espace réservé. Une extraction réussie ajoute des frais de métadonnées équivalents à 20 % des octets de ce fichier. Aucun supplément ThumbHash ne s’applique lorsque l’option est désactivée ou lorsqu’aucun hash n’est produit.Définissez cette option sur le Step qui produit l’image, par exemple
/upload/handlepour les originaux téléversés ou/image/resizepour les sorties traitées. La définir uniquement sur/transloadit/storene déclenche pas l’extraction : le stockage conserve les métadonnées du Step producteur. Transloadit Storage conserve un hash généré avec sa version immuable et le renvoie dans les résultats stockés et lors des lectures natives de ressources. Les téléversements directs vers S3 ne génèrent pas d’espaces réservés. Un espace réservé contient des informations sur l’image : protégez-le donc avec les mêmes contrôles d’accès que l’image complète.Pour les vidéos, vous pouvez ajouter le paramètre
"colorspace": truepour extraire l’espace colorimétrique de la vidéo de sortie.Pour les vidéos, vous pouvez également ajouter
"interlaced": truepour détecter si la vidéo est entrelacée. Cette option combine l’indicateur ffprobe peu coûteuxfield_orderavec une passe d’échantillonnageidetlimitée sur les premières images de la source, et exposeinterlaced,field_orderainsi qu’un objet de diagnosticinterlace_detectionsousfile.meta. Cette opération est coûteuse en calcul et facturée en conséquence.Pour l’audio, vous pouvez ajouter
"mean_volume": truepour obtenir une valeur unique représentant le volume moyen du fichier audio.Vous pouvez également définir cette option sur
falsepour ignorer l’extraction des métadonnées et accélérer le transcodage.user_metaRecord<string, any>(par défaut :{})Ajoute des métadonnées JSON personnalisées à chaque fichier émis sans modifier son contenu. Les objets et tableaux imbriqués sont pris en charge.
L’héritage dépend du Robot. Les valeurs sont fusionnées avec la valeur
user_metaexistante du fichier de sortie ; le Step actuel remplace les clés de premier niveau correspondantes. Attribuez explicitement les clés requises lorsqu’un Robot crée de nouvelles sorties.Dans les Steps de traitement,
${file.*}désigne la première entrée et${result.*}le fichier émis. Les valeurs sont évaluées pour chaque sortie après l’exécution du Robot, avant l’extraction ultérieure des métadonnées et le stockage temporaire. Sur:original, les valeurs sont évaluées pour chaque téléversement avant l’extraction des métadonnées.Les Steps en aval lisent
${file.user_meta.key}. Consultez Métadonnées personnalisées pour un exemple complet et les règles d’héritage.resultboolean(par défaut :false)Indique si les résultats de ce Step doivent figurer dans l’Assembly Status JSON
queuebatchDéfinir la file d’attente sur « batch » abaisse manuellement la priorité des Jobs de ce Step afin d’éviter de consommer des emplacements prioritaires de Jobs pour des Jobs qui n’ont pas besoin d’un temps d’attente nul dans la file
force_acceptboolean(par défaut :false)Forcer un Robot à accepter un type de fichier qu’il aurait ignoré.
Par défaut, les Robots ignorent les fichiers qu’ils ne connaissent pas. Le Robot 🤖/video/encode, par exemple, ignorera volontiers les images en entrée.
Avec le paramètre
force_acceptdéfini surtrue, vous pouvez forcer les Robots à accepter tous les fichiers qui leur sont envoyés. Cela entraîne généralement des erreurs et ne doit être utilisé que pour le débogage ou pour traiter des cas limites.ignore_errorsboolean | Array<meta | execute>(par défaut :[])Ignore les erreurs pendant certaines phases du traitement.
Si vous définissez cette valeur sur
["meta"], le Robot ignorera les erreurs lors de l’extraction des métadonnées.Si vous définissez cette valeur sur
["execute"], le Robot ignorera les erreurs lors de la phase d’exécution principale.Définir cette valeur sur
trueéquivaut à["meta", "execute"]: les erreurs seront alors ignorées dans les deux phases.usestring | Array<string> | Array<object> | objectIndique quel(s) Step(s) utiliser comme entrée.
- Vous pouvez choisir n’importe quel nom pour les Steps, sauf
":original"(réservé aux téléversements des utilisateurs gérés par Transloadit) - Vous pouvez fournir plusieurs Steps en entrée à l’aide de tableaux :
{ "use": [ ":original", "encoded", "resized" ] } - Vous pouvez également étiqueter les Steps d’entrée avec
aspour transmettre une intention sémantique aux Robots :{ "use": [ { "name": ":original", "as": "image" }, { "name": ":original", "as": "mask" } ] }
AstuceC’est probablement tout ce que vous devez savoir sur
use, mais vous pouvez consulter les cas d’utilisation avancés.- Vous pouvez choisir n’importe quel nom pour les Steps, sauf
credentialsstringVeuillez créer l’ensemble d’informations d’identification de Template associé dans votre compte Transloadit et utiliser le nom de cet ensemble d’informations d’identification de Template comme valeur de ce paramètre. Cet ensemble contiendra les valeurs S3 suivantes :
bucket,key,secretetbucket_region.Bien que nous recommandions d’utiliser systématiquement des informations d’identification de Template, certains cas d’usage exigent des identifiants dynamiques, pour lesquels l’utilisation d’informations d’identification de Template est trop contraignante en raison de leur nature statique. Si c’est votre cas, vous pouvez utiliser à la place les paramètres suivants :
"bucket","bucket_region"(par exemple :"us-east-1"ou"eu-west-2"),"key","secret".pathstring(par défaut :"${unique_prefix}/${file.url_name}")Le chemin auquel le fichier doit être stocké. Il peut inclure toute Assembly Variable disponible. Le chemin ne doit pas être un répertoire.
url_prefixstring(par défaut :"http://{bucket}.s3.amazonaws.com/")Le préfixe d’URL utilisé pour l’URL renvoyée, par exemple
"http://my.cdn.com/some/path/".aclauthenticated-read | aws-exec-read | bucket-default | bucket-owner-full-control | bucket-owner-read | private | public |(par défaut :"public-read")L’ACL utilisée pour ce fichier. Prend en charge les ACL prédéfinies d’AWS pour les objets. D’autres fournisseurs compatibles S3 peuvent prendre en charge d’autres ACL. La valeur par défaut reste
"public-read", ce qui peut entrer en conflit avec S3 Block Public Access et les ACL désactivées. Pour les buckets privés modernes, définissez explicitement"bucket-default"afin d’omettre l’en-tête ACL généré, et ne fournissez pas d’en-têtes ACL/grant dansheaders."private"envoie quand même une ACL.check_integrityboolean(par défaut :false)Calcule et transmet la somme de contrôle du fichier afin que S3 vérifie son intégrité après le téléversement, ce qui peut aider à résoudre d’occasionnels problèmes de corruption de fichiers.
Activer cette option augmente la durée d’exécution globale, car la vérification de l’intégrité peut solliciter fortement le CPU, en particulier pour les fichiers plus volumineux.
headersRecord<string, string>(par défaut :{"Content-Type":"${file.mime}"})Un objet contenant une liste d’en-têtes à définir pour ce fichier sur S3, comme
{ FileURL: "${file.url_name}" }. Cet objet peut également inclure toutes les Assembly Variables disponibles. Vous trouverez une liste des en-têtes disponibles ici.Les métadonnées des objets peuvent être spécifiées à l’aide des en-têtes
x-amz-meta-*. Notez que ces en-têtes ne prennent pas en charge les valeurs de métadonnées non ASCII.tagsRecord<string, string>(par défaut :{})Le balisage d’objets vous permet de catégoriser le stockage. Vous pouvez associer jusqu’à 10 balises à un objet. Les balises associées à un objet doivent avoir des clés de balise uniques.
hoststring(par défaut :"s3.amazonaws.com")L’hôte du service de stockage utilisé. Il ne doit être défini que si le service de stockage utilisé n’est pas Amazon S3, mais dispose d’une API compatible (comme hosteurope.de). Le protocole utilisé par défaut est HTTP ; pour tout autre protocole, celui-ci doit être indiqué explicitement. Par exemple, préfixez l’hôte avec
https://ous3://pour utiliser le protocole correspondant.no_vhostboolean(par défaut :false)Définissez ce paramètre sur
truesi vous utilisez un hôte personnalisé et rencontrez des erreurs d’accès refusé.sign_urls_forstring | numberCe paramètre fournit des URL signées dans le JSON de résultat (dans les propriétés
signed_urletsigned_ssl_url). La valeur que vous attribuez à ce paramètre correspond au délai d’expiration de l’URL, en secondes. Si ce paramètre n’est pas utilisé, aucune signature d’URL n’est effectuée.session_tokenstringLe jeton de session associé à l’ID de clé d’accès temporaire et à la clé d’accès secrète fournis pour ce téléversement vers S3 ou un service compatible tel que R2. Le Robot n’assume aucun rôle et ne rafraîchit pas ces informations d’identification ; elles doivent rester valides pendant le téléversement.
Démonstrations
Articles de blog associés
- Mise à jour de l’API : renommage de Robots pour plus de clarté
- Résoudre les incohérences des requêtes PUT S3 chez Transloadit
- Présentation du paramètre « url_prefix » du Robot /s3/store
- Lancement du Robot SFTP et d’une nouvelle page d’accueil
- Tous les Robots gèrent désormais les Assembly Variables étendues
- Passage au CLI S3 officiel pour mieux exporter les fichiers
- Gérer l’incident S3 avec des correctifs et des remises
- Nouveau modèle tarifaire pour les futurs clients de Transloadit
- No-code real-time video uploading with Bubble & Transloadit (English)
- Exporter facilement des fichiers vers DigitalOcean Spaces
- Créer des vidéos de formes d’onde audio avec FFmpeg & Node.js
- Nouveauté : transcription et sous-titrage automatiques de vidéos
- Les étapes clés et les progrès de Transloadit en 2021
- Étendre notre API pour un meilleur provisionnement Terraform
- Qu’est-ce que la localisation de contenu ?
- Comment configurer un bucket S3 pour l’utiliser avec Transloadit
- Corriger automatiquement l’orientation des pages des documents
- Suppression automatique de l’arrière-plan des images
- Générer des images saisissantes à partir de texte avec l’IA
- Agrandir et améliorer des images basse résolution en une Assembly
- Extraire texte et images des PDF avec /document/extract
- Migrer depuis Cloudinary, Filestack, Mux ou Uploadcare