0

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

我希望它工作的方式是:

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

我不知道如何安排我的代码以便发生这种情况。我可以插入行,但为了设置 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

4 回答 4

0

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

  1. 获取文件名的表单输入(例如:name =“filename”)
  2. 表单上传
  3. 如果点击提交按钮,您必须先上传文件
  4. 检查文件上传是否成功
  5. 如果成功使用“文件名”+上传操作中的 mimetype 重命名它
  6. 将“文件名”保存到数据库
  7. 如果上传失败,转到错误消息,“文件名”将不会插入数据库
于 2012-04-20T03:13:24.413 回答
0

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

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

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

现在看起来您已经完成了一些工作来抽象上传文件,因此您需要使用上述内容并将全局变量替换为上传文件的适当完整路径名。

于 2012-04-20T03:24:44.357 回答
0

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

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

于 2012-04-20T07:44:36.773 回答
-1

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

于 2012-04-20T21:18:57.840 回答