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
- O nome padrão do arquivo é
aspnetdb.mdf e a configuraçã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.IOOs 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 ThenIf 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 Elsemensagem = "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 Iflblmsg.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 Exceptionlblmsg.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:
Hiperlink => ID = hplnkConsulta NavigateUrl = ~\ConsultaVideos.aspx
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:
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:
|
Aguarde...: ASP .NET - Simplesmente YouTube III
Eu sei é apenas .NET , mas eu gosto...
Referências:
VB.NET - Tratando meus dados com métodos TableAdapter
ASP.NET 2.0 - Criando uma camada de acesso a dados
ASP.NET 2.0 - Data Access Layer com TableAdapter
José Carlos Macoratti