{"id":14035,"date":"2022-07-12T11:27:20","date_gmt":"2022-07-12T14:27:20","guid":{"rendered":"https:\/\/jmvstream.com\/?p=14035"},"modified":"2022-08-09T14:59:36","modified_gmt":"2022-08-09T17:59:36","slug":"upload-de-videos","status":"publish","type":"post","link":"https:\/\/jmvstream.com\/pt-br\/developer\/upload-de-videos\/","title":{"rendered":"Upload de V\u00eddeos"},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><p>[vc_row][vc_column][vc_column_text]O upload de v\u00eddeos \u00e9 iniciado atrav\u00e9s de uma requisi\u00e7\u00e3o POST na rota &lt;code&gt;\/v1\/videos&lt;\/code&gt; Essa rota ir\u00e1 servir somente para a cria\u00e7\u00e3o do upload, e n\u00e3o para fazer o upload propriamente dito. A partir da chamada dessa rota, ser\u00e3o retornados dados nos HEADERS da resposta que ser\u00e3o utilizados para realizar o upload.<\/p>\n<p>&nbsp;<\/p>\n<p>O upload em si ser\u00e1 feito pela rota <code>\/v1\/videos\/uploads\/:id<\/code><\/p>\n<p>&nbsp;<\/p>\n<p>Atualmente a API n\u00e3o aceita mais de um upload por vez.[\/vc_column_text][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;top_bottom&#8221; row_margin_top_bottom=&#8221;30px&#8221;][vc_column][vc_column_text]<\/p>\n<h1 style=\"text-align: center;\">Cria\u00e7\u00e3o do Upload &#8211; POST<\/h1>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;top_bottom&#8221; row_margin_top_bottom=&#8221;15px&#8221;][vc_column][vc_column_text]<\/p>\n<h2>Route (Rota)<\/h2>\n<p>[\/vc_column_text][inova_raw_html]<\/p>\n<table class=\"table\">\n<thead>\n<tr>\n<th scope=\"col\">M\u00e9todo<\/th>\n<th scope=\"col\">Rota<\/th>\n<th scope=\"col\">Descri\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>POST<\/td>\n<td><code>\/v1\/videos<\/code><\/td>\n<td>Rota para cria\u00e7\u00e3o do upload.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>[\/inova_raw_html][vc_column_text]* Token gerado pela rota de <a href=\"\/comecando\/autenticacao\/\" target=\"_blank\" rel=\"noopener\">autentica\u00e7\u00e3o<\/a>[\/vc_column_text][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;top_bottom&#8221; row_margin_top_bottom=&#8221;15px&#8221;][vc_column][vc_column_text]<\/p>\n<h2>Headers (Cabe\u00e7alho)<\/h2>\n<p>[\/vc_column_text][inova_raw_html]<\/p>\n<table>\n<thead>\n<tr>\n<th scope=\"col\">Param<\/th>\n<th scope=\"col\">Tipo<\/th>\n<th scope=\"col\">Descri\u00e7\u00e3o<\/th>\n<th scope=\"col\">Obrigat\u00f3rio<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Tus-Resumable<\/td>\n<td><code>String<\/code><\/td>\n<td>Vers\u00e3o do protocolo TUS. Enviar sempre 1.0.0<\/td>\n<td>Sim<\/td>\n<\/tr>\n<tr>\n<td>Upload-Length<\/td>\n<td><code>Number<\/code><\/td>\n<td>Tamanho do arquivo que ser\u00e1 feito o upload (Em bytes).<\/td>\n<td>Sim<\/td>\n<\/tr>\n<tr>\n<td>Upload-Metadata<\/td>\n<td><code>String<\/code><\/td>\n<td>&#8220;filename&#8221; seguido do nome do arquivo em base64.<br \/>\nEx.: Nome do arquivo: teste_convertido =&gt; Upload-Metadata: filename dGVzdGUubXA0.<\/td>\n<td>Sim<\/td>\n<\/tr>\n<tr>\n<td>Content-Type<\/td>\n<td><code>String<\/code><\/td>\n<td>application\/json<\/td>\n<td>N\u00e3o<\/td>\n<\/tr>\n<tr>\n<td>gallery<\/td>\n<td><code>String<\/code><\/td>\n<td>Uuid da galeria que o upload ser\u00e1 feito posteriormente.<\/td>\n<td>N\u00e3o<\/td>\n<\/tr>\n<tr>\n<td>Authorization<\/td>\n<td><code>String<\/code><\/td>\n<td>Token authorization.<\/td>\n<td>Sim<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>[\/inova_raw_html][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;individually&#8221; row_margin_bottom=&#8221;10px&#8221;][vc_column][vc_row_inner][vc_column_inner][vc_column_text]<\/p>\n<h2>Response (Resposta)<\/h2>\n<p>[\/vc_column_text][\/vc_column_inner][\/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]- Resposta ao realizar um upload (Status: 201)[\/vc_column_text][inova_raw_html]<\/p>\n<table class=\"table\">\n<thead>\n<tr>\n<th scope=\"col\">Name<\/th>\n<th scope=\"col\">Value<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>X-Powered-By<\/td>\n<td>Express<\/td>\n<\/tr>\n<tr>\n<td>Tus-Resumable<\/td>\n<td>1.0.0<\/td>\n<\/tr>\n<tr>\n<td>Access-Control-Expose-Headers<\/td>\n<td>Authorization, Content-Type, Location, Tus-Extension, Tus-Max-Size, Tus-Resumable, Tus-Version, Upload-Defer-Length, Upload-Length, Upload-Metadata, Upload-Offset, X-HTTP-Method-Override, X-Requested-With<\/td>\n<\/tr>\n<tr>\n<td>Location<\/td>\n<td>\/\/localhost:15214\/v1\/videos\/uploads\/410b471ac3ed2ee0f8856e7aa4358ba4<\/td>\n<\/tr>\n<tr>\n<td>Content-Length<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>Date<\/td>\n<td>Tue, 21 Jun 2022 13:09:10 GMT<\/td>\n<\/tr>\n<tr>\n<td>Connection<\/td>\n<td>keep-alive<\/td>\n<\/tr>\n<tr>\n<td>Keep-Alive<\/td>\n<td>timeout=5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>[\/inova_raw_html][\/vc_column_inner][\/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]- Resposta de erro ao n\u00e3o enviar campo obrigat\u00f3rio ou campo em formato incorreto (Status: 400)[\/vc_column_text][vc_column_text]<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\">{\r\n   \"error\": \"Bad Request\"\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column_inner][\/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]- Resposta de erro ao se tentar realizar mais de upload por vez por aplica\u00e7\u00e3o (Status: 429)[\/vc_column_text][vc_column_text]<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\">{\r\n   \"error\": \"Too many simultaneous uploads, please send one file at a time\"\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column_inner][\/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]- Resposta de erro por algum erro interno (Status: 500)[\/vc_column_text][vc_column_text]<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\">{\r\n  \"error\": \"Internal Server Error\"\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column_inner][\/vc_row_inner][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;top_bottom&#8221; row_margin_top_bottom=&#8221;30px&#8221;][vc_column][vc_column_text]<\/p>\n<h1 style=\"text-align: center;\">Realizar Upload &#8211; PATCH<\/h1>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;top_bottom&#8221; row_margin_top_bottom=&#8221;15px&#8221;][vc_column][vc_column_text]<\/p>\n<h2>Route (Rota)<\/h2>\n<p>[\/vc_column_text][inova_raw_html]<\/p>\n<table class=\"table\">\n<thead>\n<tr>\n<th scope=\"col\">M\u00e9todo<\/th>\n<th scope=\"col\">Rota<\/th>\n<th scope=\"col\">Descri\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>PATCH<\/td>\n<td><code>\/v1\/videos\/uploads\/:id<\/code><\/td>\n<td>Rota para realizar o upload.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>[\/inova_raw_html][vc_column_text]<b>OBS:<\/b> Nessa requisi\u00e7\u00e3o deve ser passado o v\u00eddeo que for especificado em Upload-Metadata em sua forma bin\u00e1ria. Como exemplo, no Insomnia, seria selecionando a op\u00e7\u00e3o &#8216;file&#8217;, e logo em seguida selecionando a op\u00e7\u00e3o &#8216;Binary file&#8217;, e depois selecionando o arquivo desejado.[\/vc_column_text][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;top_bottom&#8221; row_margin_top_bottom=&#8221;15px&#8221;][vc_column][vc_column_text]<\/p>\n<h2>Headers (Cabe\u00e7alho)<\/h2>\n<p>[\/vc_column_text][inova_raw_html]<\/p>\n<table class=\"table\">\n<thead>\n<tr>\n<th scope=\"col\">Param<\/th>\n<th scope=\"col\">Tipo<\/th>\n<th scope=\"col\">Descri\u00e7\u00e3o<\/th>\n<th scope=\"col\">Obrigat\u00f3rio<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Tus-Resumable<\/td>\n<td><code>String<\/code><\/td>\n<td>Vers\u00e3o do protocolo TUS. Enviar sempre 1.0.0<\/td>\n<td>Sim<\/td>\n<\/tr>\n<tr>\n<td>Content-Length<\/td>\n<td><code>Number<\/code><\/td>\n<td>Quantidade em bytes restantes a se fazer o upload.<\/td>\n<td>Sim<\/td>\n<\/tr>\n<tr>\n<td>Upload-Offset<\/td>\n<td><code>Number<\/code><\/td>\n<td>Byte inicial para o upload (Caso seja a primeira requisi\u00e7\u00e3o deve-se iniciar com 0, caso o upload tenha sido interrompido, deve-se continuar o upload de onde se parou, tal informa\u00e7\u00e3o \u00e9 disponibilizada pelo par\u00e2metro Upload-Offset retornado na rota HEAD \/v1\/videos\/uploads\/:id).<\/td>\n<td>Sim<\/td>\n<\/tr>\n<tr>\n<td>Upload-Metadata<\/td>\n<td><code>String<\/code><\/td>\n<td>&#8220;filename&#8221; seguido do nome do arquivo em base64. Ex.: Nome do arquivo: teste_convertido =&gt; Upload-Metadata: filename dGVzdGUubXA0.<\/td>\n<td>Sim<\/td>\n<\/tr>\n<tr>\n<td>Content-Type<\/td>\n<td><code>String<\/code><\/td>\n<td>application\/offset+octet-stream<\/td>\n<td>Sim<\/td>\n<\/tr>\n<tr>\n<td>gallery<\/td>\n<td><code>String<\/code><\/td>\n<td>Uuid da galeria que o upload ser\u00e1 feito posteriormente.<\/td>\n<td>N\u00e3o<\/td>\n<\/tr>\n<tr>\n<td>Authorization<\/td>\n<td><code>String<\/code><\/td>\n<td>Token authorization.<\/td>\n<td>Sim<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>[\/inova_raw_html][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;individually&#8221; row_margin_bottom=&#8221;10px&#8221;][vc_column][vc_row_inner][vc_column_inner][vc_column_text]<\/p>\n<h2>Response (Resposta)<\/h2>\n<p>[\/vc_column_text][\/vc_column_inner][\/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]<\/p>\n<h4>&#8211; Header da Resposta ao realizar um upload (Status: 201)<\/h4>\n<p>[\/vc_column_text][inova_raw_html]<\/p>\n<table class=\"table\">\n<thead>\n<tr>\n<th scope=\"col\">Name<\/th>\n<th scope=\"col\">Value<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>X-Powered-By<\/td>\n<td>Express<\/td>\n<\/tr>\n<tr>\n<td>Tus-Resumable<\/td>\n<td>1.0.0<\/td>\n<\/tr>\n<tr>\n<td>Access-Control-Expose-Headers<\/td>\n<td>Authorization, Content-Type, Location, Tus-Extension, Tus-Max-Size, Tus-Resumable, Tus-Version, Upload-Defer-Length, Upload-Length, Upload-Metadata, Upload-Offset, X-HTTP-Method-Override, X-Requested-With<\/td>\n<\/tr>\n<tr>\n<td>Location<\/td>\n<td>\/\/localhost:15214\/v1\/videos\/uploads\/410b471ac3ed2ee0f8856e7aa4358ba4<\/td>\n<\/tr>\n<tr>\n<td>Content-Length<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>Date<\/td>\n<td>Tue, 21 Jun 2022 13:09:10 GMT<\/td>\n<\/tr>\n<tr>\n<td>Connection<\/td>\n<td>keep-alive<\/td>\n<\/tr>\n<tr>\n<td>Keep-Alive<\/td>\n<td>timeout=5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>[\/inova_raw_html][\/vc_column_inner][\/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]<\/p>\n<h4>&#8211; Resposta de erro ao n\u00e3o enviar o upload-metadata corretamente (Status: 400)<\/h4>\n<p>[\/vc_column_text][vc_column_text]<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\">{\r\n    \"error\": \"Bad Request\"\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column_inner][\/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]<\/p>\n<h4>&#8211; Resposta de erro ao se tentar realizar mais de upload por vez por aplica\u00e7\u00e3o (Status: 429)<\/h4>\n<p>[\/vc_column_text][vc_column_text]<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\">{\r\n    \"error\": \"Too many simultaneous uploads, please send one file at a time\"\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column_inner][\/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]<\/p>\n<h4>&#8211; Resposta de erro por algum erro interno (Status: 500)<\/h4>\n<p>[\/vc_column_text][vc_column_text]<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\">{\r\n  \"error\": \"Internal Server Error\"\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column_inner][\/vc_row_inner][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;top_bottom&#8221; row_margin_top_bottom=&#8221;30px&#8221;][vc_column][vc_column_text]<\/p>\n<h1 style=\"text-align: center;\">Retorna informa\u00e7\u00f5es do Upload &#8211; HEAD<\/h1>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;top_bottom&#8221; row_margin_top_bottom=&#8221;15px&#8221;][vc_column][vc_column_text]<\/p>\n<h2>Route (Rota)<\/h2>\n<p>[\/vc_column_text][inova_raw_html]<\/p>\n<table class=\"table\">\n<thead>\n<tr>\n<th scope=\"col\">M\u00e9todo<\/th>\n<th scope=\"col\">Rota<\/th>\n<th scope=\"col\">Descri\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>PATCH<\/td>\n<td><code>\/v1\/videos\/uploads\/:id<\/code><\/td>\n<td>Rota para realizar o upload.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>[\/inova_raw_html][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;top_bottom&#8221; row_margin_top_bottom=&#8221;15px&#8221;][vc_column][vc_column_text]<\/p>\n<h2>Headers (Cabe\u00e7alho)<\/h2>\n<p>[\/vc_column_text][inova_raw_html]<\/p>\n<table class=\"table\">\n<thead>\n<tr>\n<th scope=\"col\">Param<\/th>\n<th scope=\"col\">Tipo<\/th>\n<th scope=\"col\">Descri\u00e7\u00e3o<\/th>\n<th scope=\"col\">Obrigat\u00f3rio<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Authorization<\/td>\n<td><code>String<\/code><\/td>\n<td>Token authorization.<\/td>\n<td>Sim<\/td>\n<\/tr>\n<tr>\n<td>Tus-Resumable<\/td>\n<td><code>String<\/code><\/td>\n<td>Vers\u00e3o do protocolo TUS. Enviar sempre 1.0.0<\/td>\n<td>Sim<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>[\/inova_raw_html][\/vc_column][\/vc_row][vc_row apply_row_margin=&#8221;individually&#8221; row_margin_bottom=&#8221;10px&#8221;][vc_column][vc_row_inner][vc_column_inner][vc_column_text]<\/p>\n<h2>Response (Resposta)<\/h2>\n<p>[\/vc_column_text][\/vc_column_inner][\/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]<b>OBS:<\/b> O par\u00e2metro Upload_Offset retornado indica quantos bytes ja foram enviados, quando o Upload-Offset for igual ao Upload-length, o upload foi conclu\u00eddo.[\/vc_column_text][\/vc_column_inner][\/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]- Header da Resposta ao realizar um upload (Status: 201)[\/vc_column_text][inova_raw_html]<\/p>\n<table class=\"table\">\n<thead>\n<tr>\n<th scope=\"col\">Name<\/th>\n<th scope=\"col\">Value<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>X-Powered-By<\/td>\n<td>Express<\/td>\n<\/tr>\n<tr>\n<td>Tus-Resumable<\/td>\n<td>1.0.0<\/td>\n<\/tr>\n<tr>\n<td>Access-Control-Expose-Headers<\/td>\n<td>Authorization, Content-Type, Location, Tus-Extension, Tus-Max-Size, Tus-Resumable, Tus-Version, Upload-Defer-Length, Upload-Length, Upload-Metadata, Upload-Offset, X-HTTP-Method-Override, X-Requested-With<\/td>\n<\/tr>\n<tr>\n<td>Location<\/td>\n<td>\/\/localhost:15214\/v1\/videos\/uploads\/410b471ac3ed2ee0f8856e7aa4358ba4<\/td>\n<\/tr>\n<tr>\n<td>Content-Length<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>Date<\/td>\n<td>Tue, 21 Jun 2022 13:09:10 GMT<\/td>\n<\/tr>\n<tr>\n<td>Connection<\/td>\n<td>keep-alive<\/td>\n<\/tr>\n<tr>\n<td>Keep-Alive<\/td>\n<td>timeout=5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>[\/inova_raw_html][\/vc_column_inner][\/vc_row_inner][vc_row_inner][vc_column_inner][vc_column_text]- Resposta de erro por algum erro interno (Status: 500)[\/vc_column_text][vc_column_text]<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\">{\r\n  \"error\": \"Internal Server Error\"\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column_inner][\/vc_row_inner][\/vc_column][\/vc_row]<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>[vc_row][vc_column][vc_column_text]O upload de v\u00eddeos \u00e9 iniciado atrav\u00e9s de uma requisi\u00e7\u00e3o POST na rota &lt;code&gt;\/v1\/videos&lt;\/code&gt; Essa<\/p>\n","protected":false},"author":39,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"documentation.php","format":"standard","meta":{"footnotes":""},"categories":[415,418],"tags":[],"class_list":["post-14035","post","type-post","status-publish","format-standard","hentry","category-developer","category-videos-pt-br"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jmvstream.com\/pt-br\/wp-json\/wp\/v2\/posts\/14035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jmvstream.com\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jmvstream.com\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jmvstream.com\/pt-br\/wp-json\/wp\/v2\/users\/39"}],"replies":[{"embeddable":true,"href":"https:\/\/jmvstream.com\/pt-br\/wp-json\/wp\/v2\/comments?post=14035"}],"version-history":[{"count":0,"href":"https:\/\/jmvstream.com\/pt-br\/wp-json\/wp\/v2\/posts\/14035\/revisions"}],"wp:attachment":[{"href":"https:\/\/jmvstream.com\/pt-br\/wp-json\/wp\/v2\/media?parent=14035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jmvstream.com\/pt-br\/wp-json\/wp\/v2\/categories?post=14035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jmvstream.com\/pt-br\/wp-json\/wp\/v2\/tags?post=14035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}