Servir des fichiers aux navigateurs web
🤖/file/serve sert des fichiers aux navigateurs web.

Lorsque vous souhaitez que Transloadit transforme des fichiers à la volée, vous pouvez utiliser ce Robot pour déterminer quel Step d’un Template doit être diffusé à l’utilisateur final (via un CDN), ainsi que pour définir des informations supplémentaires sur les fichiers diffusés, telles que des en-têtes. Vous pouvez ainsi, par exemple, suggérer au CDN combien de temps conserver en cache des copies du résultat. Par défaut, nous demandons aux navigateurs de mettre le résultat en cache pendant 72 h (259200 secondes) et aux CDN de mettre le contenu en cache pendant 24 h (86400 secondes). Utilisez le paramètre cache_duration pour personnaliser les deux valeurs à la fois.
🤖/file/serve sert uniquement de couche de liaison entre notre moteur d’Assembly et la diffusion de fichiers via HTTP. Il vous permet de sélectionner le résultat approprié d’une série de Steps via le paramètre use et de configurer les en-têtes du contenu d’origine. Son rôle s’arrête là. 🤖/tlcdn/deliver prend ensuite le relais pour diffuser ce contenu d’origine à travers le monde et veiller à ce qu’il soit mis en cache à proximité de vos utilisateurs finaux lorsqu’ils effectuent des requêtes telles que https://my-app.tlcdn.com/resize-img/canoe.jpg?w=500, entre autres. 🤖/tlcdn/deliver ne fait pas partie de vos Assembly Instructions, mais il peut apparaître sur vos factures, car la diffusion des copies en cache entraîne des frais de bande passante. 🤖/file/serve n’entraîne des frais que lorsque le CDN ne dispose pas de copie en cache et demande de régénérer le contenu d’origine, ce qui, selon vos paramètres de cache, pourrait ne se produire qu’une fois par mois ou par an, pour chaque fichier/transformation.
Bien que cela soit théoriquement possible, nous vous déconseillons vivement d’utiliser 🤖/file/serve directement dans des fichiers HTML, car si votre site devient populaire et que l’URL du média gérée par /file/serve reçoit un million de requêtes, cela représente un million de nouveaux redimensionnements d’image. En plaçant un CDN en amont (et grâce à la mise en cache qu’il apporte), vous maintenez les frais d’encodage et les latences à un niveau faible.
Pensez également à configurer les en-têtes de mise en cache et les directives de contrôle du cache pour contrôler la mise en cache et l’invalidation du contenu sur les serveurs périphériques du CDN, en trouvant un équilibre entre fraîcheur et efficacité.
Sécurité du Smart CDN avec des URL signées
Vous pouvez utiliser des URL signées du Smart CDN pour éviter les abus de notre plateforme d’encodage. Voici un bref exemple en Node.js utilisant notre SDK Node, mais des exemples pour d’autres langages et SDK sont également disponibles.
// yarn add @transloadit/node
// or
// npm install --save @transloadit/node
import { Transloadit } from '@transloadit/node'
const transloadit = new Transloadit({
authKey: 'YOUR_TRANSLOADIT_KEY',
authSecret: 'YOUR_TRANSLOADIT_SECRET',
})
const url = transloadit.getSignedSmartCDNUrl({
workspace: 'YOUR_WORKSPACE',
template: 'YOUR_TEMPLATE',
input: 'image.png',
urlParams: { height: 100, width: 100 },
})
console.log(url)
Cet exemple génère une URL signée du Smart CDN qui inclut des paramètres d’authentification, empêchant tout accès non autorisé à vos points de terminaison de transformation.
Pour les nouvelles intégrations, utilisez le format moderne sig + exp. Les anciennes signatures s sont dépréciées. Notez également que la période avant expiration constitue en pratique la durée de mise en cache des résultats signés : des délais d’expiration plus courts renforcent le contrôle d’accès, tandis que des délais d’expiration plus longs améliorent la réutilisation du cache et réduisent le volume d’encodage.
Plus d’informations
- Diffusion de contenu
- Tarifs de 🤖/file/serve
- Tarifs de 🤖/tlcdn/deliver
- Article de blog Fonctionnalité d’aperçu des fichiers (English)
Exemple d’utilisation
Servir des fichiers transformés avec une durée de mise en cache définie explicitement pour le navigateur et le CDN :
{
"steps": {
"resized": {
"height": 450,
"resize_strategy": "fit",
"robot": "/image/resize",
"use": ":original",
"width": 800
},
"served": {
"cache_duration": 86400,
"robot": "/file/serve",
"use": "resized"
}
}
}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
cache_durationstring | numberDurée facultative, en secondes, pendant laquelle le fichier diffusé doit être mis en cache. Lorsqu’elle est définie, cette valeur est utilisée pour les directives
max-age(cache du navigateur) ets-maxage(cache partagé/CDN) dans l’en-têteCache-Control, en remplaçant les valeurs par défaut. Par exemple, définircache_durationsur43200mettrait le fichier en cache pendant 12 heures.Cela permet de contrôler la durée de conservation des données dans les CDN. Par exemple, si vos fichiers temporaires sont supprimés après 24 heures, vous pouvez définir
cache_durationsur86400pour garantir que les copies en cache expirent également dans ce délai.download_namestringDiffuse le fichier en tant que pièce jointe avec ce nom de fichier Unicode. Une valeur vide ou omise conserve la diffusion pour affichage intégré. Remplace un en-tête Content-Disposition sans modifier les octets ni la prise en charge de Range.
headersRecord<string, string>(par défaut :{"Access-Control-Allow-Headers":"X-Requested-With, Content-Type, Cache-Control, Accept, Content-Length, Transloadit-Client, Authorization, Range, If-Range","Access-Control-Allow-Methods":"POST, GET, PUT, DELETE, OPTIONS","Access-Control-Allow-Origin":"*","Access-Control-Expose-Headers":"Transloadit-Assembly-URL, Content-Range, Content-Length, Accept-Ranges","Cache-Control":"public, max-age=259200, s-maxage=86400","Content-Type":"${file.mime}; charset=utf-8","Transloadit-Assembly":"…","Transloadit-RequestID":"…","Accept-Ranges":"bytes"})Un objet contenant une liste d’en-têtes à définir pour un fichier lorsque nous le diffusons vers un CDN/navigateur web, comme
{ FileURL: "${file.url_name}" }. Ces en-têtes sont fusionnés avec les valeurs par défaut en les remplaçant en cas de conflit, et peuvent inclure n’importe quelle Assembly Variable disponible.L’en-tête
Accept-Ranges: bytesindique que les requêtes de plage HTTP sont prises en charge pour permettre de se déplacer dans la chronologie pendant la lecture des médias. Cela repose sur le fait que tous les backends de stockage de Transloadit (S3, GCS, etc.) respectent les en-têtes de requête Range. Les en-têtes CORS incluentRangeetIf-RangedansAccess-Control-Allow-Headerspour autoriser les requêtes de plage entre origines différentes, et exposentContent-Range,Content-LengthetAccept-RangesviaAccess-Control-Expose-Headersafin que le JavaScript du navigateur puisse lire ces valeurs.
Articles de blog associés
- Building an alt-text to speech generator with Transloadit (English)
- Easy instant website screenshots via Transloadit CDN (English)
- Smart CDN enhanced with AI-powered face detection (English)
- How to get started with the Transloadit Smart CDN (English)
- Save costs with on-demand video encoding (English)