Efetuando upload de arquivos através de módulos
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