使用codeigniter将文件上传到数据库

时间:2012-06-05 12:29:17

标签: codeigniter file-upload

我需要使用codeigniter在mysql数据库中上传文件。 我的观点是:

<?php echo form_open_multipart('home/addpagina2'); ?>
<label for="titolo">Titolo:</label>
<input type="text" size="20" id="titolo" name="titolo"/>
<br/>
<label for="testo">Testo</label><br/>
<textarea name="testo" cols="50" rows="10"></textarea>
<br/>
<label for="file">File:</label>
<input type="file" name="file" />
<br />
<input type="submit" value="Aggiungi"/>
</form>

和控制器是:

function addpagina2(){
    $this->form_validation->set_rules('titolo', 'Titolo', 'trim');
    $this->form_validation->set_rules('testo', 'Testo', 'trim');

    if($_FILES["file"]["size"] > 0){
        $tmpName = $_FILES["file"]['tmp_name'];         
        $fp = fopen($tmpName, 'r');
        $file = fread($fp, filesize($tmpName));
        $file = addslashes($file);
        fclose($fp);
    }

    $pagina = array();
    $pagina['titolo'] = $this->input->post('titolo');
    $pagina['testo'] = $this->input->post('testo');
    $pagina['file'] = $file;

    $this->db->insert('pagine', $pagina);
    redirect('home/pagine');
}

当我想显示文件时,我称之为:

<?php
header("Content-type: ".$file['type']);
echo $file;
?>

由此控制器调用:

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

class File extends CI_Controller {

function __construct(){
    parent::__construct();
}

public function index(){

}

function id($id){
    $immagine = $this->db->get_where('pagine', array('id' => $id));
    $data['file'] = $immagine->row()->file;
    $this->load->view('file', $data);
}

}

问题是我在浏览器中调用视图时出错,如您所见:http://mattialori.net/amv/index.php/file/id/2 如果我使用phpmyadmin在数据库上传文件,它就可以工作。

我该怎么办?

1 个答案:

答案 0 :(得分:6)

为什么不直接将文件名保存到数据库中? 然后你可以将img上传到一个特定的文件夹中,在你的视图中你可以设置文件夹的完整路径,并在最后附加文件名。

编辑: 您可以通过以下方式使用“文件上载”类:

//Check if the file exists in the form
if($_FILES['file']['name']!=""){

//load library
$this->load->library('upload');

//Set the config
$config['upload_path'] = './uploads/'; //Use relative or absolute path
$config['allowed_types'] = 'gif|jpg|png'; 
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$config['overwrite'] = FALSE; //If the file exists it will be saved with a progressive number appended

//Initialize
$this->upload->initialize($config);

//Upload file
if( ! $this->upload->do_upload("file")){

    //echo the errors
    echo $this->upload->display_errors();
}


//If the upload success
$file_name = $this->upload->file_name;

//Save the file name into the db
}