Archive for janeiro, 2010

Upload de arquivos em Flex

Olá a todos, hoje venho falar um pouco sobre upload de arquivos no flex. O exemplo trata da primeira parte do trabalho, que e a captura do arquivo na maquina do cliente e o envio do arquivo através de uma requisição GET. No flex e necessário que uma outra página capture este arquivo e trate o mesmo, ela pode ser um pagina, jsp, php, aspx, ou alguma outra tecnologia que trabalhe com gerenciamento de arquivos WEB. Então vamos o código

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[

  private var arquivo:FileReference = new FileReference();

  private function onSelect(evt:Event):void {
    txtNomeArquivo.text = arquivo.name;
  }

  private function onUploadIoError(evt:IOErrorEvent):void {
    //Para erros no upload do arquivo tratar aqui.
  }

  private function onUploadSecurityError(evt:SecurityErrorEvent):void {
    //Para erros de segurança tratar aqui.
  }
]]>
</mx:Script>
<mx:Label x="337" y="136" text="Arquivo"/>
<mx:TextInput id="txtNomeArquivo" x="391" y="134" width="322"/>
<mx:Button x="391" y="164" label="Browser">
  <mx:click>
    <![CDATA[
      //Abre o browser para seleção do arquivo desejado.
      arquivo.addEventListener(Event.SELECT, onSelect);
      arquivo.addEventListener(IOErrorEvent.IO_ERROR, onUploadIoError);
      arquivo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onUploadSecurityError);

      var filtros:FileFilter = new FileFilter("Arquivos de Retorno *.txt; *.doc; *.docx; *.xls; *.xlsx",
                                              "*.txt; *.doc; *.docx; *.xls; *.xlsx");
      var array:Array = new Array(filtros);
      arquivo.browse(array);

    ]]>
  </mx:click>
</mx:Button>
<mx:Button x="472" y="164" label="Enviar">
  <mx:click>
    <![CDATA[
      //Envia o arquivo para Upload
       var sendVars:URLVariables = new URLVariables();
      sendVars.action = "upload";
      //aqui no sendVars poder ser passado mais de um variavel. 
      //Ex: sendVars.minhavariavel = "teste";

      //objeto usado para setar a pagina que receberá o arquivo
      var request:URLRequest = new URLRequest();
      request.data = sendVars;

      //e necessario uma pagina para receber o arquivo, ex: .php; .jsp; .aspx.
      //No caso foi usado um pagina de aspx .net.
      //A pagina deve receber o arquivo e tratá-lo.
      request.url = "http://meudominio.com.br/PaginaUpload.ashx";
      request.method = URLRequestMethod.GET; //requisição do tipo get

      //Aqui o objeto FileReference "arquivo" envia o arquivo que foi carregado 
                //com o nome de "NomeArquivo"
      //A pagina que reberá o arquivo deve este mesmo nome para manipula-lo
      arquivo.upload(request, "NomeArquivo");
    ]]>
  </mx:click>
</mx:Button>
</mx:Application>

No caso o trabalho de tramento do arquivo pode ser feito em uma tecnlogia de sua escolha, mas isto e tema para um outro post, por enquanto é só.

Ate++. Abraço a todos.

Customizando o HttpModule no Asp.Net

Olá, neste artigo iremos ver como criar um módulo HTTP (httpmodule) customizado no asp.net. O pipeline HTTP é uma série de extensões de objetos que são iniciados pelo Asp.Net runtime no momento de processar uma solicitação o HTTP Handlers e o HTTP Modules são componentes .Net que servem como pontos principais de extensibilidade dos pipelines.

Bom todo módulo deve herdar da Interface IHttpModule que se encontra no namespace System.Web, por isso iremos seguir os seguintes passos:

1-) Crie um projeto do tipo ClassLibrary chamado Module.
2-) Adicione a referência System.Web.
3-) Exclua o arquivo class1.cs do seu projeto Module e crie uma nova classe com o nome de ModuleCustom, nesta classe peça para herdar da interface IHttModule.

public class ModuleCustom : IHttpModule

 

4-) Clique na interface e peça para implementar os métodos da mesma, repare que ele irá implementar o método Init e Dispose. Perceba que no método Init estamos recebendo como parâmetro um objeto do tipo HttpApplication, este objeto é passado automaticamente pelo runtime para o Module HTTP e é nele que iremos personalizar as ações (eventos) .

Quais eventos são e o que fazem os eventos do HttpApplication ?

Segue abaixo uma lista dos eventos e a respectiva descrição:

AcquireRequestState: chame este evento para permitir que o módulo obtenha ou crie o estado (por exemplo, a sessão) da solicitação.

AuthenticateRequest: chame este evento quando um módulo de segurança precisar autenticar o usuário antes que ele processe a solicitação.

AuthorizeRequest: chame este evento através de um módulo de segurança quando a solicitação precisar ser autorizada. Chamado após autenticação.

BeginRequest: chame este evento para notificar um módulo de que a nova solicitação está começando.

Disposed: chame este evento para notificar o módulo de que o aplicativo está sendo encerrado por algum motivo. Permite que o módulo execute uma limpeza interna.

EndRequest: chame este evento para notificar o módulo de que a solicitação está terminando.

Error: chame este evento para notificar o módulo de que ocorreu um erro durante o processamento da solicitação.

PostRequestHandlerExecute: chame este evento para notificar o módulo de que o identificador terminou o processamento da solicitação.

PreRequestHandlerExecute: chame este evento para notificar o módulo de que identificador da solicitação está prestes a ser chamado.

PreSendRequestContent: chame este evento para notificar o módulo de que o conteúdo está prestes a ser enviado ao cliente.

PreSendRequestHeaders: chame este evento para notificar o módulo de que os cabeçalhos HTTP estão prestes a serem enviados ao cliente.

ReleaseRequestState: chame este evento para permitir que o módulo libere o estado, pois o identificador terminou o processamento da solicitação.

ResolveRequestCache: chame este evento após a autenticação. Os módulos de cache usam este evento para determinar se a solicitação deve ser processada pelo cache ou por um identificador.

 UpdateRequestCache: chame este evento após receber uma resposta do identificador. Os módulos de cache devem atualizar o cache com a resposta

 

5-) Para nosso exemplo iremos utilizar o evento BeginRequest, por isso iremos criar um evento dentro de nossa classe e posteriormente associaremos este evento ao evento do HttpApplication.

namespace Module

{

    public class ModuleCustom : IHttpModule

    {

        private string Inicio;

        #region IHttpModule Members

 

        public void Dispose()

        {

            throw new NotImplementedException();

        }

 

        public void Init(HttpApplication context)

        {

            context.BeginRequest += new EventHandler(OnBeginRequestCustom);

        }

 

        protected void OnBeginRequestCustom(object o, EventArgs args)

        {

            HttpApplication app = o as HttpApplication;

            Inicio = string.Format(“Hello: O BeginRequest começou a ser executado em {0}”, DateTime.Now);

            app.Context.Response.Write(Inicio);

        }

 

        #endregion

    }

 

}

 

 

Note que no exemplo acima, criamos um evento customizado chamado OnBeginRequestCustom e este evento foi associado ao HttpApplication através do EventHandler. Dentro do nosso BeginRequest customizando, estamos pegando o valor de inicio da requisição.

6-) Compile o projeto, copie a DLL para o Bin do seu projeto Web ou para o Gac do Servidor.

7-) Para finalizar no web.config da sua aplicação altere a referência do httpmodule, neste momento iremos fazer referência a nossa dll.

    <configuration>

      <system.web>

        <httpModules>

          <add name=Module type=Module.ModuleCustom, Module />

        </httpModules>

      </system.web>

    </configuration>

 

 

Nota: No caso da dll estar no gac é necessário referenciar no type o public key token.

8-) Agora basta testar o seu projeto.

 

Espero que este post seja útil.

 

Abraço,

 

Nelson Borges

Novo projeto do CodePlex facilita desenvolvimentos PHP

Você faz desenvolvimentos em PHP e mantém dados no Microsoft SQL Server? Então esse novo aplicativo seguramente vai facilitar a sua vida. Trata-se de um projeto de código aberto e hospedado no CodePlex, que ajudará desenvolvedores PHP a criarem um aplicativo CRUD (Create, Read, Update, Delete) simples, capaz de rodar tanto no Microsoft SQL Server, quanto no SQL Azure e no Windows Azure Storage.

O aplicativo pode ser facilmente instalado no Windows e suporta navegação, paginação, busca e customização de dados através de um simples CSS.

E o melhor, tudo o que você precisa é de um servidor PHP, uma conexão à internet e o SQL Server 2005 ou superior. Para saber mais detalhes sobre o novo aplicativo e sobre como utilizá-lo em seus desenvolvimentos PHP, visite o blog Interoperability@Microsoft.

 

Fonte: IT News