Realizando upload de arquivos com Flex e PHP
Veja neste artigo como desenvolver um sistema de upload de arquivos com Flex e PHP.
Neste artigo veremos como realizar o upload de arquivos com Flex e PHP em suas aplicações Flex.
O processo de envio de arquivos para o servidor web é realizado pelo PHP, mas antes de criarmos nosso código PHP, é necessário preparar o servidor para receber os arquivos, isto é, dar permissões a pastas específicas e tornar uma pasta habilitada a receber o arquivo enviado por upload.
Para dar permissão a uma pasta, clique com o botão direito do mouse no ambiente do servidor e escolha a opção “Permissões de Arquivo”. Na janela que se abrir, digite o código 777 para servidores Apache, isto dará permissões de escrita na pasta escolhida.
Partindo para o script PHP, iremos cria-lo desta maneira:
<?php
//Filedata é a variável que o flex envia com o arquivo para upload
$arquivo = $_FILES['Filedata'];
// Pasta onde o arquivo vai ser salvo
$_UP['pasta'] = 'arquivos/';
// Tamanho máximo do arquivo (em Bytes)
$_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb
// Array com as extensões permitidas
$_UP['extensoes'] = array('pdf','doc','txt', 'jpg');
// Renomeia o arquivo? (Se true, o arquivo será salvo como .jpg e um nome único)
$_UP['renomeia'] = false;
// Array com os tipos de erros de upload do PHP
$_UP['erros'][0] = 'Não houve erro';
$_UP['erros'][1] = 'O arquivo no upload é maior do que o limite do PHP';
$_UP['erros'][2] = 'O arquivo ultrapassa o limite de tamanho especifiado no HTML';
$_UP['erros'][3] = 'O upload do arquivo foi feito parcialmente';
$_UP['erros'][4] = 'Não foi feito o upload do arquivo';
// Verifica se houve algum erro com o upload. Se sim, exibe a mensagem do erro
if ($_FILES['Filedata']['error'] != 0) {
die("Não foi possível fazer o upload, erro:<br />" .
$_UP['erros'][$_FILES['Filedata']['error']]);
exit; // Para a execução do script
}
// Caso script chegue a este ponto, não houve erro com o processo de upload
e o PHP pode continuar
// Faz a verificação da extensão do arquivo
//$extensao = strtolower(end(explode('.', $_FILES['arquivo']['name'])));
$arquivo = $_FILES['Filedata']['name'];
$extensao = substr($arquivo,-3);
if (array_search($extensao, $_UP['extensoes']) === false) {
echo "Por favor, envie arquivos com as seguintes extensões: doc,
pdf, txt ou jpg";
}
// Faz a verificação do tamanho do arquivo enviado
else if ($_UP['tamanho'] < $_FILES['Filedata']['size']) {
echo "O arquivo enviado é muito grande, envie arquivos de até 2Mb.";
}
// O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta
else {
// Primeiro verifica se deve trocar o nome do arquivo
if ($_UP['renomeia'] == true) {
// Cria um nome baseado no UNIX TIMESTAMP atual e com
extensão .jpg
$nome_final = date('d-m-Y').'_'.".$extensao";
} else {
// Mantém o nome original do arquivo
$nome_final = $_FILES['Filedata']['name'];
}
// Depois verifica se é possível mover o arquivo para a pasta escolhida
if (move_uploaded_file($_FILES['Filedata']['tmp_name'], $_UP['pasta'] . $nome_final)) {
// Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo
echo "Seu arquivo foi inserido com sucesso!";
//echo '<br /><a href="' . $_UP['pasta'] . $nome_final . '">
Clique aqui para acessar o arquivo</a>';
} else {
// Não foi possível fazer o upload.Algum problema com a pasta
echo utf8_encode('Não foi possível enviar este arquivo, tente novamente');
}
}
?>
Salvamos nosso arquivo, que neste caso foi nomeado de upload.php.
Agora iremos construir um formulário HTML apenas para testar nosso script e checar se está funcionando:
<html>
<head></head>
<body>
<form method="post" enctype="multipart/form-data" action="upload.php">
<input type="file" name="Filedata">
<input type="submit">
</form>
</body>
</html>
Após testar o arquivo PHP com o formulário HTML e obtermos a mensagem de sucesso, seguimos para a parte do Flex.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">
<mx:TextArea id="status_txt" width="429" height="94"
x="144" y="62" editable="false"/>
<mx:Button x="44" y="32" click="selectFile();"
label="Selecione..."/>
<mx:TextInput x="144" y="32" id="file_txt"
width="429"/>
<mx:Label x="44" y="10" text="Anexar arquivo:"/>
<mx:Label x="44" y="63" text="Status do Envio:"
fontWeight="bold" font/>
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
public var file:FileReference;
public function selectFile():void
{
file = new FileReference();
file.addEventListener(Event.SELECT, fileSelected);
file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,
uploadDataComplete);
file.addEventListener(Event.COMPLETE, uploadComplete);
file.addEventListener(IOErrorEvent.IO_ERROR, handleError);
file.browse();
}
public function handleError(event:IOErrorEvent):void
{
status_txt.text = 'ERROR: ' + event.text + '\n';
}
public function fileSelected(event:Event):void
{
file = FileReference(event.target);
file_txt.text = file.name;
status_txt.text = 'upload file: '+ file.name + '\n';
var request:URLRequest = new URLRequest();
request.url = "http://localhost/upload.php";
file.upload(request);
}
public function uploadDataComplete(event:DataEvent):void
{
var result:XML = new XML(event.data);
status_txt.text += 'RESULTADO: ' + result.toString() + '\n';
}
public function uploadComplete(event:Event):void
{
status_txt.text += 'Upload Realizado\n';
}
]]>
</mx:Script>
</mx:Application>
No Flex foi criado um projeto chamado Up, onde nas primeiras linhas incluímos a classe de eventos e a classe responsável por alertas.
A variável do tipo filereference receberá o arquivo selecionado na máquina do usuário, seu tipo será FileReference (public var file:FileReference;) para ser utilizada no método de selecionar arquivo. No selectFile acessamos a propriedade addEventListener da variável file para escutar cada etapa do processo de upload e emitir uma mensagem correspondente.
Os eventos de erro no processo são capturados pelo método handleError.
Quando o arquivo for selecionado, o método fileselected irá enviar para a URL atribuída na variável request.
O método uploadDataComplete exibe o resultado do envio e o método uploadComplete é disparado após o evento de upload ser concluído.
Após a execução, visualizamos a aplicação funcionado, consumindo o arquivo PHP e exibindo o status do processo de upload.
Artigos relacionados
-
DevCast
-
DevCast
-
DevCast
-
DevCast
-
DevCast