Escolar Documentos
Profissional Documentos
Cultura Documentos
$this->view->menu();
} //init
style="width:70%;height:350px;display:flex;flex-direction:column;justif
y-content: space-evenly;">
<div class="form-group">
<label for="imagem_principal"
class="control-label"><strong>Selecione o Evento das
Fotos</strong></label>
<select name="evento" class="form-control selectpicker"
data-live-search="true" id="eventos" required>
<?php if(is_array($this->listevento) &&
count($this->listevento) > 0):?>
<?php foreach($this->listevento as $key => $evento) :?>
<option value="<?=$key?>" data-content="<img
class='grayscale email' width='70px;'
src='https://media.ativo.com/upload/evento/<?=$key?>/img_banner_evento.
jpg'</img> <?=$evento?>"> <?=$evento?> </option>
<?php endforeach;?>
<?php endif?>
</select>
</div>
<div class="form-group">
<label for="file"><strong>Selecione um
arquivo:</strong></label>
<input type="file" id="file" name="file"
accept=".zip" required>
</div>
Na exibição do menu suspenso, é possível observar que cada opção possui uma
imagem do banner do evento e uma descrição do evento. Os dados do evento são
obtidos a partir da função getComboEventosCasa(), que consulta o banco de dados
para buscar os eventos. É possível observar que há um código hardcoded para dois
eventos específicos no final da função, que provavelmente são inseridos manualmente
para adicionar opções ao menu suspenso.
Por fim, a página faz uso das bibliotecas Bootstrap e JQuery, além da biblioteca
Bootstrap-Select, para melhorar a aparência e a funcionalidade da página.
Para enviar um arquivo das imagens que deve está zipado e contendo em média 2GB
de dados é preciso aumentar o valor da directiva "upload_max_filesize" para um valor
igual ou superior a 5 GB para que se tenha um espaço para o processamento do uploud
do arquivo..
Para enviar um arquivo de 5GB, é necessário definir o valor para 5G ou mais. Por
exemplo, para definir o valor como 5GB, pode-se usar a seguinte diretiva no arquivo
php.ini:
upload_max_filesize = 5G
php --ini
Tudo estando certo com a configuração do servidor para uploads grandes quando o
formulário é for enviado, ele chamará a uploadAction() do controlador
Pedidoeventofoto.
if ($_FILES['file']['size'] > 0)
{
$zip = new ZipArchive;
if ($zip->open($_FILES['file']['tmp_name']) === TRUE)
{
$extractPath = '/tmp/extracted';
if (!file_exists($extractPath))
{
mkdir($extractPath);
}
$zip->extractTo($extractPath);
$zip->close();
$pedidoeventofoto = new PedidoeventofotoModel();
$fotos->imageUrls =
$pedidoeventofoto->uploud($extractPath,$pastaArquivo);
$this->_helper->redirector->gotoSimple("identifica",
"pedidoeventofoto");
} else
{
echo 'Erro ao descompactar arquivo';
exit();
}
} else
{
echo "Falha ao salvar o arquivo no S3<br>"; exit;
}
echo "URL final: ".$params['url']."<br>";
exit;
}
A função uploadAction() começa criando uma nova sessão do Zend Framework com o
nome "fotos". Em seguida, ela obtém os parâmetros da requisição e define a variável
$pastaArquivo com o caminho para a pasta onde as imagens serão armazenadas.
Depois, a função verifica se o arquivo enviado pelo usuário tem tamanho maior do
que zero. Se sim, ela cria um novo objeto ZipArchive e tenta abrir o arquivo ZIP
enviado pelo usuário. Se o arquivo for aberto com sucesso, a função cria uma pasta
temporária para extrair os arquivos ZIP e armazená-los nessa pasta. Em seguida, ela
instancia um objeto PedidoeventofotoModel e chama a função uploud() passando o
caminho da pasta temporária e o caminho para a pasta onde as imagens devem ser
armazenadas. O resultado da função uploud() é armazenado na variável
$fotos->imageUrls. Por fim, a função redireciona o usuário para a página "identifica"
do controlador "pedidoeventofoto".
Caso o arquivo ZIP enviado pelo usuário não possa ser aberto, a função exibe uma
mensagem de erro e termina a execução. Caso o arquivo tenha tamanho zero, a função
exibe uma mensagem de erro e termina a execução.
return $imageUrls;
A função uploud() recebe como parâmetros o caminho da pasta temporária criada pela
função uploadAction() e o caminho para a pasta onde as imagens devem ser
armazenadas. Ela cria um novo objeto S3Client para interagir com o serviço de
armazenamento em nuvem da Amazon. Em seguida, ela itera sobre todos os arquivos
da pasta temporária, ignorando os subdiretórios. Para cada arquivo, a função faz o
upload do arquivo para o serviço S3, utilizando o caminho para a pasta onde as
imagens devem ser armazenadas como prefixo para o nome do arquivo no S3. A
função também define o nível de acesso do arquivo como "public-read", o que
significa que qualquer pessoa pode acessar o arquivo por meio de sua URL. A função
armazenar a URL do arquivo recém-carregado em uma matriz $imageUrls. Por fim, a
função retorna a matriz $imageUrls.
Em resumo, esse código implementa uma funcionalidade de upload de imagens para o
serviço de armazenamento em nuvem da Amazon S3. Ele recebe um arquivo ZIP
contendo várias imagens, extrai as imagens para uma pasta temporária, faz o upload
das imagens para o S3 e armazena as URLs dos arquivos no S3 em uma matriz. O
código usa as bibliotecas Zend Framework e AWS SDK for PHP para realizar essas
tarefas.
Se tudo ocorrer como deve ser, o usuário é redirecionado para a action identifica do
controller pedidoeventofoto usando o helper redirector. Isso significa que, após o
upload das imagens e o processamento das mesmas, o usuário será redirecionado para
a página correspondente.
$urlsNrPeito = array();
foreach($fotos->imageUrls as $url)
{
$pedidoeventofoto = new PedidoeventofotoModel();
$urlsNrPeito[$url] =
$pedidoeventofoto->reconhecerImagem($url);
}
$fotos->urlsNrPeito = $urlsNrPeito;
$this->_helper->redirector->gotoSimple("save",
"pedidoeventofoto");
}
return $nrs_peito;
}
$this->_helper->redirector->gotoSimple("save", "update");
}
O arquivo também inclui um sistema de paginação que permite navegar pelas várias
páginas da tabela de resultados. A barra de navegação é renderizada com base no
número total de páginas, que é definido em $this->totalPages na action
relatorioAction.
Além disso, o arquivo inclui um botão "Download" que, quando clicado, chama a
action exportar em pedidoeventofoto controller. O script JavaScript abaixo do botão
captura o evento de clique e redireciona o navegador para a URL da ação de
exportação.
Depois disso, os dados das fotos identificadas pelo evento são buscados no banco de
dados, e as células da planilha são preenchidas com esses dados. A cada iteração do
loop que percorre os dados, a cor de fundo das células é alternada entre cinza e azul,
para melhorar a visualização da tabela.
Por fim, são definidos os cabeçalhos para download do arquivo XLSX, e o arquivo é
salvo utilizando o objeto PHPExcel_IOFactory. Resumindo, a função exportarAction()
cria um arquivo Excel contendo os dados das fotos identificadas pelo evento
especificado, e disponibiliza esse arquivo para download pelo usuário.