Upload/download files with Codeigniter

Asked

Viewed 1,158 times

2

You guys all right ? I am developing a small web system in which price to upload budgets and later your download, I am following a tutorial that I found but I have an error that I cannot solve:

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

It’s not even getting to 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 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 para 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: inserir a descrição da imagem aqui

  • you are being redirected to which url? this setting $config['base_url'] = 'http://localhost/updown/'; is really your project url? because after clicking to upload you will be redirected to http://localhost/updown/upload your routes seem correct, what seems not to exist is the final url, if you can post the tutorial link that is following, I can take a look and post a code working for you, following what you’re already doing, good luck

  • Thanks for the help Robson, follow the link http://www.universidadecodeigniter.com.br/upload-e-download-files/

1 answer

2


if you have not created the . htaccess file, create the . htaccess file at the root of your project: Obs:create the file where the main codeigniter index.php file is located

and leave him 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 mod_rewrite active

  • I didn’t post a code working like I said, because I didn’t have to do anything other than the tutorial, I just added the file. htaccess with these settings and the code worked, in case you can’t post what you gave of different

  • Thank you very much Robson was that even this working now

Browser other questions tagged

You are not signed in. Login or sign up in order to post.