上传文件后数据库ukuran_file字段始终为0,如何正确插入文件大小?
问题解决:CodeIgniter上传文件时文件大小字段始终为0
你的代码核心问题出在上传数据的获取方式上:
- 你用
$this->upload->data('file_name')仅获取到文件名(字符串类型),随后将这个字符串赋值给$dokumen_file,再尝试用$dokumen_file['size']读取文件大小——但字符串不存在数组索引['size'],这个值实际为无效值,最终插入数据库时被转为0。 - 代码未处理上传失败的场景,若文件不符合规则(如大小超限、类型不允许),程序仍会执行插入操作,导致错误数据入库。
修正后的完整代码
$djenjang_capaian = $this->session->userdata('djenjang_capaian'); $pengirim = $this->session->userdata('pengirim'); $path = FCPATH . "/upload/document/capaian/$pengirim"; if (!is_dir($path)) { mkdir($path, 0777, TRUE); } $config['upload_path'] = $path; $config['allowed_types'] = 'jpg|png|pdf|xlsx|xls|doc|docx|zip|rar'; $config['max_size'] = "2048"; $file_name = "dok-cpn-" . rand(100, 999) . uniqid(); $config['file_name'] = $file_name; $this->load->library('upload', $config); // 先判断文件上传是否成功 if ($this->upload->do_upload('dokumen_file')) { // 获取包含所有上传信息的完整数组 $upload_data = $this->upload->data(); // 从完整数组中分别提取文件名和文件大小 $dokumen_file = $upload_data['file_name']; $ukuran_file = $upload_data['size']; $data = array( 'dokumen_file' => $dokumen_file, 'ukuran_file' => $ukuran_file ); if ($this->db->insert($djenjang_capaian, $data)) { $this->session->set_flashdata("success", " Data berhasil ditambahkan!"); redirect('user/page/pemenuhan_dokumen'); } else { $this->session->set_flashdata("error", " Data gagal ditambahkan!"); redirect('user/page/pemenuhan_dokumen'); } } else { // 上传失败时返回错误提示 $error_msg = $this->upload->display_errors(); $this->session->set_flashdata("error", " Upload gagal: " . $error_msg); redirect('user/page/pemenuhan_dokumen'); }
关键修改点说明
- 调用
$this->upload->data()不带参数,获取包含文件大小、文件名、文件类型等所有上传信息的数组。 - 增加上传成功的判断逻辑,避免上传失败时执行无效的数据库插入操作。
- 从完整的上传数据数组中提取
size字段,确保文件大小值准确有效。
内容的提问来源于stack exchange,提问作者maartin and gina
相关产品推荐
相关产品推荐

