Upload / download files with Codeigniter

You Guys Talking okay ? I am developing a small web system in which price to upload budgets and later download them, I am following a tutorial that I found but I am with an error that I can not solve:

By selecting the file and clicking process I am directed to error page 404. below follows my code

It is not even arriving in the upload method inside the controller Base.php

Config.php

$autoload['libraries'] = array('upload');
$autoload['helper'] = array('url','string','download');

$config['base_url'] = 'http://localhost/updown/';

Roads.php

$route['default_controller'] = 'Base';

$route['upload'] = 'Base/Upload';
$route['download/(:any)/(:any)'] = 'Base/Download/$1/$2';

View to upload Home.php:

<div>
    <?php if(isset($error)):?>
        <div><?=$error?></div>
    <?php endif; ?>

    <form action="<?=base_url('upload')?>" method="POST" 
     enctype="multipart/form-data">
    <div>
        <label>Selecione um arquivo (zip, rar, pdf, doc, xls, jpg, png, gif)</label>
        <input type="file" name="arquivo"/>
    </div>
    <div>
        <input type="submit" value="Processar" />
    </div>
</form>

View for download download.php:

<div>
<h3>Informações do arquivo</h3>
<?php
    foreach($dadosArquivo as $key => $value):
        if($value): 
?>
            <strong><?=$key?></strong>: <?=$value?>
<?php
        endif; 
    endforeach;
?>
<hr />
<a href="<?=base_url()?>" >Novo arquivo</a>
<a href="<?=$urlDownload?>">Download</a>

Base Controller.php:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Base extends CI_Controller {

// Método construtor da classe
function __construct(){
    parent::__construct();
}

// Método que carregará a home
public function Index()
{
    // carrega a view 'home.php'
    $this->load->view('home');
}

// Método que processar o upload do arquivo
public function Upload(){

    // definimos um nome aleatório para o diretório 
    $folder = random_string('alpha');
    // definimos o path onde o arquivo será gravado
    $path = "./uploads/".$folder;

    // verificamos se o diretório existe
    // se não existe criamos com permissão de leitura e escrita
    if ( ! is_dir($path)) {
    mkdir($path, 0777, $recursive = true);
}

    // definimos as configurações para o upload
    // determinamos o path para gravar o arquivo
    $configUpload['upload_path']   = $path;
    // definimos - através da extensão - 
    // os tipos de arquivos suportados
    $configUpload['allowed_types'] = 'jpg|png|gif|pdf|zip|rar|doc|xls';
    // definimos que o nome do arquivo
    // será alterado para um nome criptografado
    $configUpload['encrypt_name']  = TRUE;

    // passamos as configurações para a library upload
    $this->upload->initialize($configUpload);

    // verificamos se o upload foi processado com sucesso
    if ( ! $this->upload->do_upload('arquivo'))
    {
        // em caso de erro retornamos os mesmos para uma variável
        // e enviamos para a home
        $data= array('error' => $this->upload->display_errors());
        $this->load->view('home',$data);
    }
    else
    {
        //se correu tudo bem, recuperamos os dados do arquivo
        $data['dadosArquivo'] = $this->upload->data();
        // definimos o path original do arquivo
        $arquivoPath = 'uploads/'.$folder."/".$data['dadosArquivo']['file_name'];
        // passando para o array '$data'
        $data['urlArquivo'] = base_url($arquivoPath);
        // definimos a URL para download
        $downloadPath = 'download/'.$folder."/".$data['dadosArquivo']['file_name'];
        // passando para o array '$data'
        $data['urlDownload'] = base_url($downloadPath);

        // carregamos a view com as informações e link para download
        $this->load->view('download',$data);
    }
}

// Método que fará o download do arquivo
public function Download(){
    // recuperamos o terceiro segmento da url, que é o nome do arquivo
    $arquivo = $this->uri->segment(3);
    // recuperamos o segundo segmento da url, que é o diretório
    $diretorio = $this->uri->segment(2);
    // definimos original path do arquivo
    $arquivoPath = './uploads/'.$diretorio."/".$arquivo;

    // forçamos o download no browser 
    // passando como parâmetro o path original do arquivo
    force_download($arquivoPath,null);
}

}

Error returned: insert the description of the image here

Author: Felipe Miranda De Lima, 2017-03-28

1 answers

If you did not create the file .htaccess, create the file at the root of your project .htaccess: note: create the file where the index file is.main PHP of codeigniter

And leave it like this:

<IfModule mod_rewrite.c>
RewriteEngine On


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

Note, to run your server you need to have the mod_rewrite module Active

 2
Author: Robson gomes de jesus, 2017-03-28 21:18:35