上传文件时遇到问题

时间:2012-04-19 22:08:42

标签: php codeigniter file-upload

我有一个表单,人们选择文件,在文本框中键入文件名,然后单击“保存”,它应该将文件保存在服务器上。

我希望它的工作方式是:

1)在数据库中插入一行。 2)使用作为db的row_id的文件名保存文件。 (ex.38.pdf) 3)使用文件扩展名更新数据库。

我无法弄清楚如何安排我的代码。我可以插入行但是为了设置file_name(保存文件的名称)我需要有扩展名。获取扩展的唯一方法是加载库。为了加载库我需要设置$ config数组(其中一个是file_name)。

非常困惑。可能很明显,但也许我一直在盯着它看。感谢您的帮助和好运,了解它。顺便说一句,我使用codeigniter框架。

(截至目前,这段代码已被破坏。我已经搞乱了大约一个半小时。这正是我最近尝试过的)

将表单定向到的上传函数---------

 public function do_upload () {
    $fileName = $this->input->post('name');
    $scopeId = $this->session->userdata('scopeId');
    $user = 'user';

    $date = date('n/d/Y', time());
    $query = $this->db->query('
        INSERT 
        INTO scope_uploads 
        VALUES(
            NULL, 
            '. $scopeId .', 
            "'. $fileName .'", 
            "'. $user .'", 
            "'. $date .'",
            "N/A"
        )
    ');

    $lastId = $this->db->insert_id();

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

    $fileData = $this->upload->data();
    $fileExt = $fileData['file_ext'];

    $config['upload_path'] = './uploads/';      
    $config['allowed_types'] = 'gif|jpg|pdf';       
    $config['file_name'] = ''. $lastId .'.'. $fileExt .'';
    $config['max_size'] = '1000';
    $config['max_width'] = '1024';
    $config['max_height'] = '768';

    $this->load->library('upload', $config);

    $query2 = $this->db->query('
        UPDATE scope_uploads
        SET extension = "'. $fileExt .'"
        WHERE id = '. $lastId .'
    ');

    $error = '';

    if (!$this->upload->do_upload('userfile')) {
        $error = array('error' => $this->upload->display_errors());
        echo 'error';
    } else {
        $data = array('upload_data' => $this->upload->data());          
    }

    if ($error == '') {
        redirect(site_url('headquarters/scopeSummary'));
    } else if ($error !== '') {
        $deleteLastRow = $this->db->query('
            DELETE 
            FROM scope_uploads
            WHERE id = '. $query->insert_id() .'
        ');
    }

    print_r($error);
}

4 个答案:

答案 0 :(得分:0)

我不会解释任何代码,因为您只需要对代码进行一些更改。

  1. 获取文件名的表单输入(例如:name =“filename”)
  2. 表格上传
  3. 如果提交了提交按钮,则必须先上传文件
  4. 检查fileupload是否成功
  5. 如果成功将其重命名为“filename”+来自上传操作的mimetype
  6. 将“filename”保存到数据库
  7. 如果上传失败,请转到错误消息,“filename”不会插入数据库

答案 1 :(得分:0)

您不需要文件扩展名,您需要mime类型。任何人都可以上传以.jpg结尾的文件,但这并不意味着它不是一些文本文件,其中包含谁知道什么。

要获取mime类型,您应该使用可能需要安装的FINFO库。

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type =  finfo_file($finfo, $_FILES['userfile']['tmp_name']);
finfo_close($finfo);

现在看起来你已经做了一些工作来抽象上传的文件,所以你需要采取上述内容并将全局变量替换为上传文件的相应完整路径名。

答案 2 :(得分:0)

codeigniter中的mime类型有一个form_validation库插件:http://codeigniter.com/forums/viewthread/123816/

我在我的项目中使用它并且工作得很好。

答案 3 :(得分:-1)

感谢您的帮助。阅读codeigniter文档我认为在重命名上传文件时我必须包含扩展名。事实证明我没有。得到了一切修复。