Integração da API do YouTube ASP.NET - Faça upload de vídeo com uma única página
-
08-07-2019 - |
Pergunta
Estamos tentando usar a API do Google YouTube para fazer upload de vídeos do nosso site para o YouTube através do navegador diretamente.
A API funciona em duas etapas, na primeira etapa, precisamos criar um objeto de vídeo com todos os metadados como título, tags, descrição, categoria etc. Então precisamos enviar uma solicitação com este objeto para o YouTube e obter um objeto de token gerado como uma resposta. Este objeto simbólico tem um valor simbólico e um URL simbólico como seus membros.
Na segunda etapa, eles sugerem que devemos criar um formulário com o atributo de ação definido para o URL do token. Este formulário deve ter um controle de upload de arquivo e um campo oculto com o valor do token como seu valor. Quando este formulário é publicado, ele carregava o vídeo no YouTube.
Isso funciona muito bem se o tivermos como um processo de duas etapas, pedindo aos usuários os metadados primeiro e depois redirecionando -os para a segunda página para o upload de vídeo real. No entanto, estamos tentando fazer isso em uma única página, aparecendo como uma única etapa para o usuário.
Temos uma página master com o 'aspnetform' especificado nele, por causa do qual não podemos ter outra forma com runat='server'
propriedade.
Tentamos modificar o atributo de ação do ASPNETFROM usando JavaScript/Code-Behind, mas permanece o mesmo, o que fizermos.
Também tentamos colocar outro formulário aninhado, cuja tag de ação seria definida no evento de clique no botão, após a primeira resposta do YouTube com o token ser recebido. Mas mesmo isso não funciona, pois o formulário não é criado no momento em que esse método é chamado ..
Tentamos várias abordagens, mas nenhuma parece funcionar. Alguma sugestão sobre isso seria ótima.
Se você tiver mais alguma dúvida para entender a situação claramente .. por favor me avise ..
Atualizar:
Obrigado pelas respostas pessoal.
Mudamos a lógica de negócios um pouco para resolver o problema. Já estava há muito tempo e não estou procurando uma resolução a partir de agora ..
No entanto, a questão ainda está aberta e obtendo respostas. Eu realmente aprecio toda a ajuda e, portanto, deixaria a pergunta em aberto para mais discussões.
Solução
Eu criaria um formulário que você exibe para o usuário com campos de texto para os metadados e um controle de upload de arquivo para o vídeo.
Então, no código que lida com o postback, você pode enviar os metadados para a API do YouTube para obter o valor do token.
Você então cria um Httpwebrequest com o valor do token passado para o Create
Método do WebRequest
objeto e defina o Method
propriedade para Post
. Você então adiciona o vídeo carregado (veja Resposta do Dr. Evil para "Faça o upload de arquivos com httpwebrequest (multipart/form-data)" para mais uma caminhada disso), e quando você liga GetResponse()
Seu arquivo será enviado.
Coisas a serem observadas:
ScriptTimeout
: Se você está permitindo que seus usuários enviem arquivos grandes no YouTube - se demorar um pouco para você transmiti -lo, seu script poderá ser encerrado prematuramente.- Largura de banda: você terá o upload para seus servidores e, em seguida, o upload para o YouTube para explicar - permitindo que o usuário faça o upload diretamente para o YouTube em um processo de duas etapas, você nunca toca no vídeo e nunca chega perto de seus servidores - Isso pode ser um problema para você ou seu provedor de hospedagem - por exemplo, meu host não conta o tráfego através do FTP na minha largura de banda mensal, mas inclui arquivos enviados/baixados no site.
Outras dicas
Você pode postar no formulário do YouTube programaticamente. Recentemente, modifiquei o exemplo encontrado em http://www.codeproject.com/kb/cs/uploadfileex.aspx Para escrever algum código que postou um arquivo em um site de terceiros como um emprego noturno.
Isso envolveria um desempenho de desempenho, pois o arquivo teria que ser carregado no seu servidor e, em seguida, no YouTube, em vez de diretamente no YouTube, mas é uma opção.