« September 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
 

Efetuando upload de arquivos através de módulos

por Aldinei Sampaio -posted at 29/05/2009 12:48 Última modificação 29/05/2009 12:48

Segue um exemplo de uma solução que consiste em permitir que um usuário efetue upload de arquivos para o servidor web.

A solução consiste em um módulo que poderá ser acessado por um site externo ao Kankei, utilizando uma URL especial que inclui informações de autenticação no sistema (a URL é gerada através da função K.BD.GetResourceURL). Este módulo, ao ser executado, exibe uma página de login e após a autenticação do usuário exibe o formulário de upload.

O arquivo enviado pelo usuário será gravado pelo módulo na pasta "C:\Arquivos de Programas\Kankei\<Login do usuário>".

Perceba que o mecanismo de autenticação usado no exemplo não é o mesmo do Kankei, tanto que neste exemplo não é feita nenhuma verificação se o usuário existe ou se a senha está correta.

Ao todo são 3 módulos:

modUpload : Este é o módulo principal, que deve ser usado para gerar o link externo através da função K.BD.GetResourceURL.

modUploadLoginView : Gera a página HTML de login.

modUploadFileView : Gera a página HTML de upload.

Os módulos que geram HTML fazem referência ao módulo 'modHTMLHelper', cujo código fonte pode ser encontrado neste artigo.

modUpload

<%
/*
=========================================
modUpload
---
Após exibir uma página de login, permite ao usuário efetuar upload
de um arquivo, salvando o mesmo em uma pasta do servidor web.
---
A etapa de login foi incluída porque o acesso a este módulo pode
ser tornado público, através da geração de uma URL pela função
K.BD.GetResourceURL().
---
Kankei Software e Consultoria Ltda - Todos os direitos reservados
Aldinei Sampaio - 29/mai/2009
=========================================
*/

if (Parameters("__IsPostBack") != '1') {
    // O módulo está sendo executado pela primeira vez, mostrar login
    Module.Run('modUploadLoginView');
    
} else if (ToString(Parameters('usuario')) == '') {
    // Usuário e senha informados    
    //
    // O modUploadFileView contém um HiddenField com o nome do usuário,
    // de forma a "lembrar" qual usuário está logado. Caso este parâmetro
    // esteja vazio, é porque o usuário e senha ainda não foram validados,
    // logo, a tela atual é o modUploadLoginView.

    if (ProcessarUsuario()) {
        Parameters('usuario') = Parameters('usuarioAValidar');
        Module.Run('modUploadFileView');
    } else {
        Module.Run('modUploadLoginView');
    }
    
} else {
    // Arquivo para Upload informado
    // Incluir aqui lógica para verificação de campos requeridos    

    if (ProcessarArquivo()) {
        Parameters('mensagem') = 'Arquivo processado com sucesso';
    }
    
    // Exibe novamente a tela de upload caso o usuário queira
    // enviar mais arquivos
    Module.Run('modUploadFileView');
}

function ProcessarUsuario() {
    if (ToString(Parameters('usuarioAValidar')) == '') {
        Parameters('mensagem') = 'Usuário não informado'
        return false;
    }

    if (ToString(Parameters('senha')) == '') {
        Parameters('mensagem') = 'Senha não informada'
        return false;
    }

    // Incluir aqui lógica para validação de usuário e senha
    
    return true;
}


function ProcessarArquivo() {
    if (!Parameters("__Files")) {
        Parameters('mensagem') = 'Arquivo para upload não informado';
        return false;
    }
    
    var arquivos = Parameters("__Files");
    if (arquivos.Count == 0) {
        Parameters('mensagem') = 'Arquivo para upload não informado';
        return false;
    }
    
    // Caso exista mais de um campo para upload de arquivos no form,
    // a variável files pode conter mais de um arquivo
    var arquivo = arquivos(1); // arquivos(1) é o primeiro da lista, arquivos(2) é o segundo e assim por diante
    
    if (arquivo.Length > 1024*1024) {
        Parameters('mensagem') = "Arquivo muito grande. Limite: 1MB"
        return false;
    }
    
    var nomePasta = 'C:\\Arquivos de Programas\\Kankei\\' + Parameters('usuario');
    
    var fs = K.CreateObject('Scripting.FileSystemObject');
    if (!fs.FolderExists(nomePasta)) {
        fs.CreateFolder(nomePasta);
    }
    
    arquivo.SaveAs(nomePasta + '\\' + arquivo.Name);
    
    return true;
}

%>

modUploadLoginView

<%
/*
=========================================
modUploadLoginView
---
Gera uma página HTML para o usuário informar login e senha.
---
Instruções para o usuário, como mensagens de "nome de usuário ou
senha inválida" podem ser informados a este módulo através
do parâmetro "mensagem".
---
Kankei Software e Consultoria Ltda - Todos os direitos reservados
Aldinei Sampaio - 29/mai/2009
=========================================
*/

eval(K.BD.GetScriptObject('modHTMLHelper').text);

%>
<html>
    <head>
        <title>Upload de Arquivo</title>
    </head>
    <body>
        <%=html.OpenForm()%>
            <h1>Upload de arquivos</h1>
            <table>
                <tr>
                       <td colspan="2" style="text-align:center">
                           <%=Parameters('mensagem')%>
                       </td>
                   </tr>
                <tr>
                    <td>
                        Usuário:
                    </td>
                    <td>
                        <%=html.TextBox('usuarioAValidar')%>
                    </td>
                </tr>
                <tr>
                    <td>
                        Senha:
                    </td>
                    <td>
                        <%=html.Password('senha')%>
                    </td>
                </tr>
                   <tr>
                       <td colspan="2" style="text-align:center">
                           <%=html.Button('Enviar')%>
                       </td>
                   </tr>
               </table>
        <%=html.CloseForm()%>
    </body>
</html>

modUploadFileView

<%
/*
=========================================
modUploadFileView
---
Gera uma página HTML para o usuário efetuar upload de arquivo.
---
Os campos 'nome', 'sexo' e 'enviaremail' foram incluídos apenas
para ilustrar as funcionalidades do modHTMLHelper e não estão
sendo usados pelos outros módulos deste exemplo.
---
Kankei Software e Consultoria Ltda - Todos os direitos reservados
Aldinei Sampaio - 29/mai/2009
=========================================
*/

eval(K.BD.GetScriptObject('modHTMLHelper').text);

%>
<html>
    <head>
        <title>Upload de Arquivo</title>
    </head>
    <body>
        <%=html.OpenUploadForm()%>
            <%=html.HiddenField('usuario')%>
            <h1>Upload de arquivo</h1>
            <table>
                <tr>
                       <td colspan="2" style="text-align:center">
                           <%=Parameters('mensagem')%>
                       </td>
                   </tr>
                <tr>
                    <td>
                        Nome:
                    </td>
                    <td>
                        <%=html.TextBox('nome')%>
                    </td>
                </tr>
                <tr>
                    <td>
                        Sexo:
                    </td>
                    <td>
                        <%=html.DropDownList('sexo', ['Masculino', 'Feminino'])%>
                    </td>
                </tr>
                <tr>
                    <td>
                    </td>
                    <td>
                           <%=html.CheckBox('enviaremail', 'Enviar email')%>
                       </td>
                   </tr>
                   <tr>
                       <td>
                           Arquivo:
                       </td>
                       <td>
                           <%=html.FileUpload('arquivo',{size:"80"})%>
                       </td>
                   </tr>
                   <tr>
                       <td colspan="2" style="text-align:center">
                           <%=html.Button('Enviar')%>
                       </td>
                   </tr>
               </table>
        <%=html.CloseForm()%>
    </body>
</html>

 

Category(s)
KANKEI KANKEI