Seja num blog ou numa intranet, muitas e muitas vezes precisamos que nosso site receba algum tipo de arquivo. Podem ser as imagens que complementarão algum texto, arquivos compactados de algum projeto, ou mesmo outras páginas que complementem nossa aplicação.
Vamos criar uma nova action em nosso projeto com o nome "upload" e vamos observar no código abaixo, a ser inserido no evento OnRequest da action "upload", como é simples receber arquivos através de nosso CGI e direcioná-los para o diretório que precisarmos:
procedure TFPWebModule1.uploadRequest(Sender: TObject; ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
begin
//configura retorno
AResponse.ContentType := 'text/html;charset=utf-8';
//Cria o formulário de envio de arquivos.
//ele será visível a todo momento neste exemplo
AResponse.Contents.Add( '<form action="/cgi-bin/projeto.cgi/upload" method="post" enctype="multipart/form-data" name="formulario">' );
AResponse.Contents.Add( '<label>Escolha um arquivo: </label><br /><input type="file" name="arquivo"/>' );
AResponse.Contents.Add( '<br /><input type="submit" class="btnBlue" value="enviar"/>' );
AResponse.Contents.Add( '</form>' );
//se algum arquivo for recebido,
//transfere para o diretório que desejarmos
if ARequest.Files.Count > 0 then
begin
//copia o arquivo recebido para o diretório que especificamos,
//mantendo o nome original do arquivo e sua extensão.
//neste caso, o arquivo será copiado para um diretório acima do cgi-bin
CopyFile( ARequest.Files[0].LocalFileName, '../' + ARequest.Files[0].FileName );
//após a cópia, informa o sucesso do Upload
AResponse.Contents.Add('<p style="color:green;">Arquivo enviado!</p>');
end;
//ação completada
Handled:= True;
end;
Atenção aos comentários no código e quanto às configurações do formulário HTML, para que a aplicação possa receber arquivos por POST.
* Reitero que o diretório de onde vamos salvar nossos arquivos, é relativo ao diretório de onde está localizado nossa aplicação!
Podemos agora, testar nosso CGI acessando o formulário de envio de arquivos:
- http://127.0.0.1/cgi-bin/projeto.cgi/upload
Após enviar algum arquivo, vá ao diretório que especificou e confira se ele foi transferido corretamente.
* Lembre-se que o CGI deve ter permissão de escrita no diretório escolhido!