Upload / download files with Codeigniter

2

Talk, how are you? I am developing a small web system at which price to upload budgets and later its download, I am following a tutorial that I found but I am with an error that I can not solve:

When I select the file and click process, I'm directed to the 404 error page. Here is my code:

It is not even coming up with the upload method inside the Base.php controller

config.php

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

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

Routes.php

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

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

view for 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 to 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>

controler Base.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:

    
asked by anonymous 28.03.2017 / 21:53

1 answer

2

If you did not create the .htaccess file, create the .htaccess file at the root of your project: obs: create the file where codeigniter's main index.php file is located

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, in order to work your server needs to have mod_rewrite module active

    
28.03.2017 / 23:18