Resposta do Assembly Status
A Transloadit usa um único formato de resposta para criar e consultar Assemblies, anexar respostas a formulários de upload e enviar Notifications.
A seguir, veja um exemplo completo de uma resposta da Transloadit. Como os arquivos são processados em paralelo,
a ordem de results não segue necessariamente a mesma ordem de uploads. Também pode
haver vários resultados para um único upload. Para associar os resultados aos uploads, você pode usar o
campo original_id, que está presente em ambos os itens.
Exemplo de resposta
{
"assembly_id": "7828446e5acd4aa996dce3455ec914e9",
"ok": "ASSEMBLY_COMPLETED",
"message": "The Assembly was successfully completed.",
"warnings": [],
"account_id": "4ce4fb3d9d1842b6ba5d6f3ccee4b066",
"assembly_ssl_url": "https://api2-morven.transloadit.com/assemblies/7828446e5acd4aa996dce3455ec914e9",
"assembly_url": "http://api2-morven.transloadit.com/assemblies/7828446e5acd4aa996dce3455ec914e9",
"build_id": "339",
"bytes_expected": 486608,
"bytes_received": 486608,
"bytes_usage": 1097155,
"client_agent": null,
"client_ip": null,
"client_referer": null,
"companion_url": "https://api2-morven.transloadit.com/companion/",
"executing_jobs": [],
"execution_duration": 5.281,
"execution_start": "2020/01/09 12:02:08 GMT",
"expected_tus_uploads": 1,
"fields": {},
"finished_tus_uploads": 1,
"has_dupe_jobs": false,
"instance": "morven.transloadit.com",
"is_infinite": false,
"jobs_queue_duration": 0.01,
"last_job_completed": "2020/01/09 12:02:14 GMT",
"merged_params": "{\"steps\":{\":original\":{\"robot\":\"/upload/handle\"},\"faces_detected\":{\"use\":\":original\",\"robot\":\"/image/facedetect\",\"crop\":true,\"faces\":\"max-confidence\",\"format\":\"preserve\",\"crop_padding\":\"10%\"},\"exported\":{\"use\":[\"faces_detected\",\":original\"],\"robot\":\"/s3/store\",\"credentials\":\"demo_s3_credentials\"}},\"auth\":{\"key\":\"****\",\"expires\":\"2020-01-10T12:02:05.826Z\"}}",
"notify_duration": null,
"notify_response_code": null,
"notify_start": null,
"notify_status": null,
"notify_url": null,
"params": "{\"steps\":{\":original\":{\"robot\":\"/upload/handle\"},\"faces_detected\":{\"use\":\":original\",\"robot\":\"/image/facedetect\",\"crop\":true,\"faces\":\"max-confidence\",\"format\":\"preserve\",\"crop_padding\":\"10%\"},\"exported\":{\"use\":[\"faces_detected\",\":original\"],\"robot\":\"/s3/store\",\"credentials\":\"demo_s3_credentials\"}},\"auth\":{\"key\":\"****\",\"expires\":\"2020-01-10T12:02:05.826Z\"}}",
"parent_assembly_status": null,
"parent_id": null,
"queue_duration": 0.184,
"running_jobs": [],
"start_date": "2020/01/09 12:02:06 GMT",
"started_jobs": [
":original:::original",
"faces_detected:::original",
"exported:::original",
"exported::faces_detected"
],
"started_tus_uploads": 1,
"template": null,
"template_id": null,
"transloadit_client": "node-sdk:2.0.8",
"tus_url": "https://api2-morven.transloadit.com/resumable/files/",
"upload_duration": 2.814,
"upload_meta_data_extracted": true,
"uppyserver_url": "https://api2-morven.transloadit.com/companion/",
"update_stream_url": "https://api2-morven.transloadit.com/ws20074?assembly=7828446e5acd4aa996dce3455ec914e9",
"websocket_url": "https://api2-morven.transloadit.com/ws20074",
"uploads": [
{
"id": "a30bd0776e7f4ac3817b056d102e8219",
"basename": "joe-gardner-149699",
"ext": "jpg",
"field": "file",
"from_batch_import": false,
"is_tus_file": true,
"md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
"mime": "image/jpeg",
"name": "joe-gardner-149699.jpg",
"original_basename": "joe-gardner-149699",
"original_id": "a30bd0776e7f4ac3817b056d102e8219",
"original_md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
"original_name": "joe-gardner-149699.jpg",
"original_path": "/",
"size": 485784,
"ssl_url": "https://s3.amazonaws.com/demos.transloadit.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
"tus_upload_url": "https://api2-morven.transloadit.com/resumable/files/UPLOAD_ID+CAPABILITY_TOKEN",
"type": "image",
"url": "http://demos.transloadit.com.s3.amazonaws.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
"meta": {
"aspect_ratio": "1.500",
"average_color": "#b09d96",
"colorspace": "RGB",
"date_file_modified": "2020/01/09 12:02:08 GMT",
"frame_count": 1,
"has_clipping_path": false,
"has_transparency": false,
"height": 1667,
"width": 2500
}
}
],
"results": {
":original": [
{
"id": "a30bd0776e7f4ac3817b056d102e8219",
"basename": "joe-gardner-149699",
"cost": 97157,
"execTime": 0.81,
"ext": "jpg",
"field": "file",
"from_batch_import": false,
"is_tus_file": false,
"md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
"mime": "image/jpeg",
"name": "joe-gardner-149699.jpg",
"original_basename": "joe-gardner-149699",
"original_id": "a30bd0776e7f4ac3817b056d102e8219",
"original_md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
"original_name": "joe-gardner-149699.jpg",
"original_path": "/",
"queue": "live",
"queueTime": 0.01,
"size": 485784,
"ssl_url": "https://s3.amazonaws.com/demos.transloadit.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
"tus_upload_url": null,
"type": "image",
"url": "http://demos.transloadit.com.s3.amazonaws.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
"meta": {
"aspect_ratio": "1.500",
"average_color": "#b09d96",
"colorspace": "RGB",
"date_file_modified": "2020/01/09 12:02:08 GMT",
"frame_count": 1,
"has_clipping_path": false,
"has_transparency": false,
"height": 1667,
"width": 2500
}
}
],
"faces_detected": [
{
"id": "b8d12f6c517541ca86bf50c537cedb27",
"basename": "joe-gardner-149699",
"cost": 627606,
"execTime": 0.83,
"ext": "jpg",
"field": "file",
"from_batch_import": false,
"is_tus_file": false,
"md5hash": "2a5cd917f4281b9438956e489c63dfd2",
"mime": "image/jpeg",
"name": "joe-gardner-149699.jpg",
"original_basename": "joe-gardner-149699",
"original_id": "a30bd0776e7f4ac3817b056d102e8219",
"original_md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
"original_name": "joe-gardner-149699.jpg",
"original_path": "/",
"queue": "live",
"queueTime": 0,
"size": 141822,
"ssl_url": "https://s3.amazonaws.com/demos.transloadit.com/b8/d12f6c517541ca86bf50c537cedb27/joe-gardner-149699.jpg",
"tus_upload_url": null,
"type": "image",
"url": "http://demos.transloadit.com.s3.amazonaws.com/b8/d12f6c517541ca86bf50c537cedb27/joe-gardner-149699.jpg",
"meta": {
"aspect_ratio": "0.739",
"average_color": "#8d654d",
"colorspace": "RGB",
"date_file_created": "2020/01/09 12:02:09 GMT",
"date_file_modified": "2020/01/09 12:02:12 GMT",
"faces": [
{
"confidence": 99.99,
"height": 840,
"width": 621,
"x1": 981,
"x2": 1550,
"y1": 121,
"y2": 891
}
],
"frame_count": 1,
"has_clipping_path": false,
"has_transparency": false,
"height": 840,
"width": 621
}
}
]
}
}
Explicação dos campos
ok-
Indica um status de ciclo de vida sem erro, incluindo os estados de upload em andamento, execução em andamento, abortado e cancelado. O processamento bem-sucedido é indicado por
ASSEMBLY_COMPLETED. Se a Assembly encontrou um erro, a chaveerrorabaixo é usada no lugar desta chave. error-
Indica um status de erro. Esta chave só está presente se a Assembly falhou. Novos códigos de erro podem ser adicionados. Trate códigos não reconhecidos como falhas e preserve seus valores para inspeção programática.
message-
Uma mensagem legível por humanos que explica o estado desta Assembly. Nem sempre está presente.
assembly_id-
O ID exclusivo desta Assembly. Você pode armazená-lo em um banco de dados quando uma Assembly for criada e usá-lo para associar as Notifications recebidas.
assembly_url-
A URL exclusiva usada para consultar o status atual desta Assembly.
assembly_ssl_url-
A URL exclusiva usada para consultar o status atual desta Assembly, mas pronta para ser usada via SSL/HTTPS. Todas as requisições de API enviadas para
assembly_urltambém podem ser enviadas paraassembly_ssl_url. companion_url-
A URL do servidor Companion com o qual esta Assembly pode se comunicar.
websocket_url-
A URL de um servidor Websocket (usa Socket.IO) do qual você pode obter atualizações de status em tempo real desta Assembly.
update_stream_url-
A URL de um fluxo de eventos enviados pelo servidor do qual você pode obter atualizações de status em tempo real desta Assembly.
tus_url-
A URL do servidor tus usado por esta Assembly para uploads retomáveis.
bytes_received-
O número de bytes que foram enviados para esta Assembly até agora. Isso é usado principalmente pelos clientes para exibir o progresso do upload.
bytes_expected-
O número de bytes que esta Assembly espera receber por upload.
bytes_usage-
O número total de bytes processados por esta Assembly que são contabilizados na sua cobrança por uso. A soma de
bytes_usagede todas as suas Assemblies equivale ao seu uso mensal total. client_agent-
O agente de usuário de quem faz o upload não é exposto; este campo obsoleto é sempre
null. client_ip-
O endereço IP de quem faz o upload não é exposto; este campo obsoleto é sempre
null. client_referer-
A URL de referência de quem faz o upload não é exposta; este campo obsoleto é sempre
null. start_date-
A data e a hora em que o upload foi iniciado para esta Assembly.
upload_duration-
O tempo que quem faz o upload levou para enviar os arquivos, em segundos.
execution_duration-
O tempo que a Transloadit levou para executar esta Assembly, em segundos.
fields-
Um mapa de chave/valor de campos adicionais do formulário para integrações que não podem usar o encapsulamento
<form>, como o Uppy. uploads-
Um array de arquivos enviados para esta Assembly. Para mais informações, consulte a documentação de metadados.
results-
Os arquivos de resultado que a Transloadit produziu até agora. Cada chave é o nome do Step que produziu um arquivo. Robots de armazenamento não produzem arquivos, por isso os nomes de seus Steps são omitidos. Quando ocorre um
error, este objeto pode conter resultados parciais.
Metadados personalizados de arquivos
Os objetos de arquivo em uploads e results podem conter um objeto user_meta com valores JSON personalizados,
incluindo objetos e arrays aninhados. Trate-o como opcional ao ler as respostas; ele pode estar vazio ({}).
O mapa contém valores de uploads tus, das Instructions do Step e de quaisquer metadados herdados pelo Robot.
Os valores definidos pelo Step atual substituem as chaves correspondentes no nível superior. Isso é separado dos metadados
detectados do arquivo em meta e dos valores da requisição no nível da Assembly em fields.
Por exemplo, um arquivo pode conter "user_meta": { "stage": "resized", "approved": false }. Os Steps
subsequentes leem ${file.user_meta.stage} e ${file.user_meta.approved}. Consulte
Metadados personalizados para saber quando ocorre a avaliação, as regras de herança e um fluxo de trabalho completo.