Principais pontos
- Mantenha o Auth Secret em um servidor confiável e passe-o por meio de variáveis de ambiente.
- Crie uma Assembly com um Step de upload e um Step de redimensionamento de imagem que faça a imagem caber em 400 × 400 pixels.
- Imprima tanto a URL do resultado quanto o Assembly ID para que a primeira execução seja fácil de inspecionar.
A integração útil mais curta com a Transloadit é um script no lado do servidor que faz o upload de uma imagem e gera uma versão derivada. Ela comprova que as credenciais, a transferência de arquivos, o processamento e o tratamento de resultados funcionam antes que um navegador, um destino de armazenamento, um banco de dados ou um webhook acrescentem mais partes móveis.
O que mais importa
- Trate o arquivo retornado como temporário até que um Step de exportação o armazene permanentemente.
Comece com um único processo de servidor confiável
Crie um Workspace gratuito, abra a página de credenciais e gere uma Auth Key e um Auth Secret. Este guia rápido no lado do servidor precisa tanto da Auth Key quanto do Auth Secret. Não cole nenhum desses valores no arquivo-fonte e nunca envie o segredo para um navegador. O Node SDK usa o par para autenticar as requisições sem transmitir o Auth Secret como credencial da requisição.
Escolha uma imagem JPEG, PNG, WebP ou AVIF pequena que já esteja no disco. Uma entrada modesta mantém a primeira execução rápida e torna a saída fácil de reconhecer. O script aceita apenas o caminho do arquivo como argumento de linha de comando, então o mesmo código pode ser executado novamente com outro arquivo de teste sem precisar editá-lo.
Auth Key
Identifica a credencial usada para a Assembly e pode ser referenciada com segurança por código de integração confiável.
Auth Secret
Permanece no ambiente do servidor e é usado pelo SDK para autenticar a requisição.
Um único arquivo local
Mantém esta execução focada no caminho da API, em vez do estado de upload no navegador ou de importações remotas.
Instale o SDK e prepare o comando
Crie um projeto vazio de módulo ES e adicione o SDK atual para Node com npm. Na próxima seção, salve a listagem TypeScript como quickstart.ts e execute-a com o comando mostrado depois da listagem. Este guia de início rápido executa o arquivo TypeScript diretamente com a remoção nativa de tipos do Node, então não precisa de tsx nem de ts-node. A remoção nativa de tipos vem ativada por padrão a partir do Node 22.18 e do Node 23.6, então use Node 22.18+, Node 23.6+ ou 24. O SDK e a imagem são as únicas entradas de tempo de execução.
Passe as credenciais ao processo por meio de variáveis de ambiente. O histórico do shell, a inspeção de processos, os logs de CI e a política da máquina local influenciam se atribuições de ambiente inline são apropriadas; por isso, use seu gerenciador de segredos habitual em produção. O comando mostrado aqui é intencionalmente local e de curta duração.
mkdir transloadit-quickstart
cd transloadit-quickstart
npm init -y
npm pkg set type=module
npm install @transloadit/nodeUma dependência
@transloadit/node cuida da autenticação, do upload de arquivos, da consulta periódica de status e das respostas tipadas.
Execução nativa de TypeScript
Executa o arquivo TypeScript diretamente, mantendo um exemplo tipado que pode ser copiado e colado.
Nenhum arquivo de segredos necessário
O guia de início rápido lê as duas credenciais do ambiente do processo.
Execute a primeira Assembly
Salve a listagem TypeScript abaixo como quickstart.ts. O Step :original aceita o upload. O Step resized indica :original em use, então começa depois que o upload produz um arquivo. Seu resize_strategy é fit, o que preserva a proporção e mantém ambas as dimensões dentro de 400 pixels, em vez de recortar a imagem em um quadrado.
Com waitForCompletion ativado, createAssembly retorna assim que a Assembly atinge um estado terminal. Esse comportamento bloqueante deixa o primeiro resultado evidente, mas é uma conveniência didática, não uma arquitetura padrão para vídeos lentos, lotes grandes ou um manipulador de requisições com timeout curto.
import { Transloadit } from '@transloadit/node'
async function main(): Promise<void> {
const authKey = process.env.TRANSLOADIT_KEY
const authSecret = process.env.TRANSLOADIT_SECRET
const inputPath = process.argv[2]
if (authKey == null || authSecret == null || inputPath == null) {
throw new Error(
'Set TRANSLOADIT_KEY and TRANSLOADIT_SECRET, then pass an image path.',
)
}
const transloadit = new Transloadit({ authKey, authSecret })
const assembly = await transloadit.createAssembly({
files: { image: inputPath },
params: {
steps: {
':original': {
robot: '/upload/handle',
},
resized: {
use: ':original',
robot: '/image/resize',
result: true,
width: 400,
height: 400,
resize_strategy: 'fit',
},
},
},
waitForCompletion: true,
})
const result = assembly.results?.resized?.[0]
if (result == null) {
throw new Error(`Assembly ${assembly.assembly_id} produced no resized result.`)
}
console.log(`Result: ${result.ssl_url}`)
console.log(`Assembly: ${assembly.assembly_id}`)
}
main().catch((error: unknown) => {
if (!(error instanceof Error)) {
throw new Error(`Was thrown a non-error: ${error}`)
}
console.error(error.message)
process.exit(1)
})env \
TRANSLOADIT_KEY="YOUR_TRANSLOADIT_KEY" \
TRANSLOADIT_SECRET="YOUR_TRANSLOADIT_SECRET" \
node quickstart.ts ./your-image.jpg:original
O Step de upload reservado que disponibiliza os arquivos recebidos para os Robots seguintes.
resized
Um nome escolhido pela integração; ele também se torna a chave usada para ler esses arquivos de resultado.
fit
Limita a saída sem esticar nem remover conteúdo da imagem.
Inspecione o resultado em vez de parar no sucesso
Abra a URL HTTPS de resultado exibida e confirme que as dimensões e o conteúdo visível correspondem à solicitação. Depois, abra a Assembly no Transloadit Console usando o ID dela. O Assembly Status mostra os uploads, os resultados dos Steps, os carimbos de data/hora, os metadados e qualquer erro, o que faz dele o primeiro lugar para comparar o que a aplicação solicitou com o que a plataforma executou.
Guarde o Assembly ID junto ao identificador de tarefa ou de ativo da sua própria aplicação. Uma URL sozinha não basta para solucionar problemas, porque não explica qual entrada, quais parâmetros ou qual Step a produziram. Em produção, persista os campos de resultado específicos de que sua aplicação precisa, em vez de armazenar ou retornar integralmente uma resposta bruta de terceiros.
Verificação visual
Confirma que o fluxo de trabalho produziu a versão derivada pretendida, e não apenas um código de status de sucesso.
Assembly Status
Fornece o rastro de processamento e os metadados para depuração e reconciliação.
Registro da aplicação
Conecta o Assembly ID externo ao usuário, à entrada e à ação de negócio que o originaram.
Transforme a prova de conceito em uma integração de produção
Os arquivos temporários da Assembly ficam retidos por cerca de 24 horas e se destinam a um número limitado de recuperações de curto prazo, não a serem servidos diretamente aos usuários finais. Adicione um Robot de exportação, como /s3/store, /azure/store ou o destino que pertence à sua aplicação, antes que um resultado se torne durável. Armazene chaves de nuvem como Credenciais de Template, e não como valores literais no código da aplicação ou nas Assembly Instructions.
Em seguida, salve os Steps como um Template, defina allow_steps_override como false quando os chamadores não tiverem permissão para alterar o grafo e envie apenas o template_id do Template junto com campos validados. Uploads pelo navegador precisam de parâmetros assinados e com expiração, gerados por um backend. O trabalho em segundo plano deve retornar imediatamente um ID de tarefa da aplicação, consumir um webhook verificado, aceitar entregas duplicadas com segurança e fazer a reconciliação com o Assembly Status quando uma notificação for perdida.
Exportação permanente
Move os resultados para fora da janela padrão de retenção temporária e para um armazenamento próprio.
Template salvo
Mantém o grafo de processamento sob controle enquanto as integrações enviam um Template ID compacto.
Conclusão verificada
Um webhook assinado e uma reconciliação periódica tornam recuperáveis as tarefas de longa duração.
Exponha um status seguro, proteja os diagnósticos e mantenha um teste de fumaça
Uma interface de produção deve mostrar um estado conciso, controlado pela aplicação, como “na fila”, “em processamento”, “pronto” ou “com falha”. Os operadores ainda precisam de um caminho protegido desse registro até o Assembly ID e os diagnósticos sanitizados. Não retorne aos usuários finais erros brutos do provedor, rastreamentos de pilha, respostas do armazenamento ou URLs que carregam credenciais só porque o guia de início rápido imprime um resultado em um terminal.
Mantenha uma imagem minúscula sabidamente válida e as restrições de saída esperadas como teste de fumaça. Execute-o após a rotação de credenciais ou uma mudança controlada no fluxo de trabalho, mas não inclua uma Assembly externa paga em cada execução de testes unitários. Os testes unitários devem validar a política e o mapeamento locais, enquanto uma verificação de integração explícita comprova, em conjunto, a credencial real, o upload, o Robot e o caminho do resultado.
Estado seguro no cliente
Exponha um status acionável sem vazar uma resposta de terceiros ou uma exceção interna.
Rastro protegido
Permita que operadores autorizados acessem o Assembly ID e os diagnósticos necessários para a investigação.
Dado de teste sabidamente válido
Distingue falhas da integração real de mídias incomuns de clientes quando o caminho é testado.
Detalhes técnicos que vale a pena conhecer
- Uma Assembly corresponde a uma única execução das Assembly Instructions. Cada Step de processamento invoca um único Robot e declara sua entrada anterior com
use; o Step de upload reservado:originalé a origem e não recebeuse. - O SDK para Node gera a autenticação das requisições a partir da Auth Key e do Auth Secret. O segredo deve ficar apenas em um processo de servidor confiável, nunca em JavaScript do navegador ou em um aplicativo móvel.
- Definir
waitForCompletioncomo true faz o SDK consultar o status periodicamente até que a Assembly atinja um estado terminal, o que é conveniente para uma primeira execução pequena, mas inadequado para manipuladores de requisição demorados. - A flag
resultmarca os arquivos de um Step para inclusão no objetoresultsde nível superior da Assembly. Isso não torna os arquivos permanentes. - Por padrão, os arquivos temporários da Assembly ficam disponíveis por cerca de 24 horas e para um número limitado de recuperações. Não sirva as URLs deles diretamente aos usuários finais; adicione um Robot de exportação para arquivos destinados aos usuários.
- O Assembly ID é uma referência útil para depuração, mesmo quando uma aplicação armazena seu próprio identificador de tarefa de nível mais alto.
Uma abordagem prática
- 1
Crie uma Auth Key e escolha uma imagem local pequena.
- 2
Instale o Node SDK e execute o guia rápido em TypeScript com as credenciais no ambiente.
- 3
Abra a URL do resultado impressa e inspecione a Assembly no Console.
- 4
Mova o fluxo de trabalho para um Template salvo e adicione armazenamento permanente antes do uso em produção.
Quando a Transloadit é útil
Use o Node SDK para criar uma Assembly contendo /upload/handle e /image/resize. O SDK assina a requisição com credenciais do lado do servidor, faz o upload do arquivo local, aguarda a conclusão e retorna a URL do resultado e o Assembly ID.
Limite da arquitetura
Este guia rápido roda em um servidor confiável e aguarda até que uma imagem pequena termine de ser processada. Uma integração no navegador precisa receber de um backend parâmetros assinados e de curta duração, enquanto, em produção, o trabalho em segundo plano deve preferencialmente usar um webhook verificado em vez de manter uma requisição HTTP aberta.
Perguntas frequentes
Posso colocar o Auth Secret no JavaScript do navegador neste guia rápido?
Não. O exemplo roda no lado do servidor. Um navegador deve solicitar parâmetros de Assembly assinados e de curta duração a um backend que mantém o Auth Secret privado.
Por que o script aguarda a conclusão?
waitForCompletion facilita a verificação de uma primeira execução, pois retorna o resultado finalizado. Em produção, os handlers de requisição normalmente devem iniciar o trabalho em segundo plano e usar um webhook verificado ou uma consulta de status (polling) controlada.
Onde a imagem redimensionada fica armazenada?
É um resultado temporário da Assembly, mantido por 24 horas por padrão. Adicione um Robot de armazenamento para mantê-lo permanentemente em um destino que você controla.
Por que usar fit em vez de fillcrop?
fit preserva a imagem completa e a limita à caixa solicitada. fillcrop preenche as dimensões exatas por meio de recorte, o que exige uma decisão intencional de composição.
O que devo salvar depois que a Assembly terminar?
Salve o Assembly ID, seu próprio ID de tarefa ou de ativo, os metadados de resultado selecionados e o local de armazenamento durável, além de um status final sanitizado. Por padrão, não exponha a resposta bruta inteira aos clientes.