ASP .NET - Simplesmente YouTube II


Estamos continuando o artigo ASP .NET - Simplesmente YouTube I , e agora vou mostrar a definição do código para postar vídeos, onde o usuário, a partir da página Videos.aspx, vai selecionar um vídeo e enviá-lo ao servidor e o arquivo será salvo no banco de dados SQL Server.

Antes eu gostaria de falar sobre um pequeno detalhe da implementação da autenticação e autorização que fizemos também no artigo anterior.

Quando usamos os controles de Login na verdade estamos usando os novos providers Roles e MemberShip e os novos controles para gerenciar usuários, com isso  esta tarefa ficou praticamente automatizada.(eu disse praticamente e não completamente...).

O conjunto dos novos recursos chamados provedores faz parte da nova arquitetura chamada Provider Model onde os providers são componentes que fornecem serviços configuráveis idênticos aos plug-ins.

Os providers Roles e MemberShip fornecem os recursos para gerenciar a autenticação e autorização. Onde a autenticação é o processo para verificar a identidade do usuário e a autorização refere-se ao gerenciamento das permissões dos usuários.

Provedor Classe Base Descrição
MemberShip MemberShiperProvider Gerenciar os usuários na aplicação ASP.NET 2.0 - Responsável pela autenticação dos usuários
Roles RoleProvider Gerenciar os papeis dos usuários na aplicação ASP.NET 2.0 - Responsável pela autorização com atribuição de grupos e permissões.

Através do provedor MemberShip podemos criar novos usuários e senhas em um banco de dados e validar a identidade do usuário usando a informação armazenada.  Para armazenar a informação o provedor usa um banco de dados SQL Server que é gerado automaticamente, e, de forma transparente na pasta App_Data, se usarmos o modo padrão do provedor.

Acima temos o banco de dados SQL Server ASPNETDB.MDF criado automaticamente na pasta App_Data. Se expandirmos o objeto Tables na janela DataBase Explorer veremos as tabelas usadas para cada objeto de personalização.

Os provedores Roles e MemberShip persistem a informação usando um banco de dados SQL Server Express usando uma string de conexão padrão chamada LocalSQLServer que esta localizada no arquivo machine.config. Este arquivo você encontra na pasta  :  \WINDOWS\Microsoft.NET\Framework\v2.x\CONFIG
<connectionStrings>

<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>

</connectionStrings>

- O nome padrão do arquivo é aspnetdb.mdf e a configuração
- AttachDBFileName : indica que a conexão é feita usando diretamente um banco de dados
- |DataDirectory|: indica que o arquivo de dados esta localizado no diretório App_Data da aplicação
- instance=true : indica que criada de forma dinâmica uma instância de servidor para a conexão.

Para mais detalhes veja o meu artigo : ASP.NET - Usando Roles e MemberShip

Agora vamos continuar, lembre-se que temos que definir o código associado ao evento Click do botão Publicar Video de forma que o video selecionado via controle FileUpload seja enviado e salvo no SQL Server.

Abra o arquivo code-behind Video.aspx.vb e antes de mais nada vamos declarar os seguintes imports:

Imports System.IO
Imports
VideosTableAdapters

Os primeiro namespace permite o acesso as classes do sistema para tratamento de arquivos e o segundo permite acesso ao nosso TableAdapter criado.

Agora no evento Click do botão inclua o seguinte código:

Protected Sub btnPublicar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPublicar.Click

 

Dim mensagem As String = ""

Dim mimeType As String = ""

If txtTitulo.Text <> String.Empty Then

           If txtDescricao.Text <> String.Empty Then

                        If FileUpload1.HasFile Then

                                    Dim extensaoArquivo As String = Path.GetExtension(FileUpload1.FileName.ToUpper)

                            Select Case extensaoArquivo

                                            Case ".AVI"

                                          mimeType = "video/avi"

                                            Case ".WMV"

                                         mimeType = "video/x-ms-wmv"

                                 Case Else

                                         mensagem = "Tipo de v¡deo invalido. (Somente .avi e .wmv sÆo aceitos !)"

                                      End Select

                                       If mensagem = String.Empty Then

                                     gravaVideo(txtTitulo.Text, _

                                                       FileUpload1.FileName, _

                                                       txtDescricao.Text, _

                                                       User.Identity.Name, _

                                                       mimeType, _

                                                       FileUpload1.FileBytes, _

                                                       DateTime.Now, _

                                                                         True, _

                                                       False)

                                     End If

                       Else

                         mensagem = "Nenhum arquivo foi selecionado !"

                      End If

                Else

                  mensagem = "Informe a descri‡Æo do v¡deo"

               End If

Else

          mensagem = "Informe o t¡tulo do v¡deo"

End If

lblmsg.Text = mensagem

End Sub

Observe que eu não estou usando os controles de validação do ASP .NET, eu poderia fazê-lo, foi apenas uma opção minha não usá-los. Para saber mais sobre os controles de validação veja o meu artigo:  ASP.NET - Trabalhando com Controles de validação

Eu estou validando  a entrada do usuário nos controles txtTitulo e txtDescricao no código  e exibindo uma mensagem no controle Label(ID=lblmsg) da página.

Após isso verificamos  se o controle FileUpload selecionou um arquivo (FileUpload1.HasFile) . Neste caso obtemos a extensão do arquivo e verificamos se o arquivo possui a extensão .AVI ou .WMV, pois estamos permitido o envio somente deste dois tipos de arquivos.

Se tudo estiver dentro do permitido chamamos a rotina gavaVideo() passando os parâmetros que são os campos que definimos na tabela Videos.

gravaVideo(txtTitulo.Text, FileUpload1.FileName, txtDescricao.Text,  User.Identity.Name,  mimeType, ileUpload1.FileBytes,  DateTime.Now, True, False)

 

A rotina gravaVideo() é a responsável por gravar os dados na tabeala Video

 

Private Sub gravaVideo(ByVal tit As String, _

                                               ByVal arq As String, _

                                               ByVal desc As String, _

                                   ByVal user As String, _

                                               ByVal mime As String, _

                                               ByVal bytes As Byte(), _

                                               ByVal dat As DateTime, _

                                               ByVal at As Boolean, _

                                               ByVal pub As Boolean)

 

Dim mensagem As String = ""

Dim videoAdapter As VideosTableAdapter = New VideosTableAdapter()

Try

      videoAdapter.Insert(tit, arq, desc, user, mime, bytes, dat, at, pub)

      txtTitulo.Text = ""

      txtDescricao.Text = ""

      lblmsg.Text = "Video " & tit & " Inclu¡do na base de v¡deos com sucesso !"

Catch ex As Exception

      lblmsg.Text = "Erro ao incluir o v¡deo " & tit & " na base de v¡deos " & ex.Message.ToString

End Try

End Sub

Esta rotina basicamente cria uma instância da classe VideosTableAdapter e usa o método Insert para incluir as informações na tabela Videos. Muito simples não é mesmo ????

Obs: Eu poderia ter usado outro método para persistir estas informações.

Quando os TableAdapters são criados eles são criados com métodos que podem ser executados diretamente contra uma fonte de dados. Estes métodos são conhecidos como DbDirect.

Os métodos TableAdapter.Insert, TableAdapter.Update, e TableAdapter.Delete podem ser chamados diretamente para efetuar a manipulação de dados em uma fonte de dados.  Se você não quiser criar estes métodos defina a propriedade GenerateDbDirectMethods  do TableAdapter como False na janela de propriedades.

Qualquer consulta incluída no TableAdapter em adição as consultas principais do TableAdpater são consultas únicas e não geram os métodos DbDirect.

Obs: Lembre-se que você deve ter permissão para executar os comandos INSERT, UPDATE e DELETE no banco de dados.

Vejamos agora a página que irá permitir ao usuário consultar os vídeos postados no site. O acesso a esta página é feito através do hiperlink na página Videos.aspx conforme definimos:

A página ConsultaVideos.aspx possui o seguinte leiaute:

Para criar esta página no menu WebSite selecione Add New Item e no template selecione WebForm informando o nome ConsultaVideos.aspx marcando a opção Select Master Page e selecionado a nossa master page Mestre.master.

A seguir inclua na página uma tabela , a partir do menu Table -> Insert Table, com 7 linhas e uma coluna.

Em seguida inclua os seguintes controles na página:

O controle UpdatePanel do ASP.NET AJAX permite que você crie aplicações web com uma interface mais interativa e amigável com o usuário. Usando este controle você pode atualizar partes selecionadas de uma página ao invés de atualizar toda a página web usando um postback.(efetuar uma atualização parcial da página - partial-page update).

Você pode usar um ou mais controles UpdatePanel em uma página que já contenha o controle ScriptManager que podem participar de atualizações parciais da página sem ter que criar código de script do lado do cliente.

O controle UpdatePanel do ASP.NET AJAX é um controle de servidor e ao usá-lo o comportamento da página é independente do Navegador usado e pode reduzir potencialmente a quantidade de dados que é transferido entre o cliente e o servidor.

Quando esta página for executada ela irá exibir a relação de vídeos postados no GridView conforme abaixo:

Mas espere um pouco....

O que é este controle para exibir vídeo na página  ? Como ele surgiu ???

É um pássaro ?  é um avião ? É ...

Não ! é apenas o controle Windows Media Player que embutimos em um controle de usuário...

Na continuação deste artigo  eu vou mostrar a criação do controle de usuário (Web User Control) onde embutimos o controle Windows Média Player de forma que a exibição do vídeo pudesse ser feita no controle da própria página.

User Controls - São componentes(invólucros) nos quais você inclui uma linguagem de marcação (tags) e controles web servers, podendo ser tratados como uma unidade e também possuírem propriedades e métodos;

 

Os controles de usuário (user controls) são baseados na classe System.Web.UI.UserControl possuindo a seguinte hierarquia de classe:

  • Object

    • Control

      • TemplateControl

      • UserControl

Você pode criar user controls reutilizando controles que já existem e isso torna a tarefa muito mais fácil do que criar Custom Controls.

 

Um user control ASP.NET é parecido com uma página Web completa (*.aspx) contendo a interface do usuário  e código, e,  você cria um user control da mesma forma que você cria uma página web em ASP.NET.

 

Um user control difere de uma página ASP.NET nos seguintes itens:

  • A extensão do arquivo de um usre control é .ascx;

  • Ao invés de usar a diretiva @page, um user control  contém uma diretiva @Control que define a configuração e outras propriedades;

  • Um user control não pode ser executado diretamente você precisa incluí-lo em uma página ASP.NET como um controle comum;

  • Um user control não possui os elementos html, body ou form no seu interior. Você pode usar os demais elementos HTML livremente.

Aguarde...: ASP .NET - Simplesmente YouTube III

Eu sei é apenas .NET , mas eu gosto...

Referências:


José Carlos Macoratti