上传文件时遇到问题
我有一个表单,用户选择一个文件,在文本框中输入一个文件名,然后点击保存,它应该将文件保存在服务器上。上传文件时遇到问题
我希望它的工作方式是,它:
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);
}
感谢您的帮助。读取codeigniter文档时,我认为在重命名上传文件时必须包含扩展名。事实证明,我没有。知道了一切。
明天之前不能接受这个答案。 :( – 2012-04-20 21:19:21
我不会解释任何代码,因为你只需要对代码进行一些更改。
- 文件名采取的形式输入(例如:名字=“文件名”)
- 形式上传
- 如果提交按钮被采用,您必须上传文件第一
- 检查文件上传成功与否是
- 如果成功以“文件名”重命名为+从上传动作
- 保存“文件名”数据库MIME类型
- 如果上传失败,转到错误消息,并且“文件名”无线不会插入到数据库中
你不想要文件扩展名,你想要的MIME类型。任何人都可以上传一个以.jpg
结尾的文件,但这并不意味着它不是一些知道其中的文本文件。
要获得mime类型,您应该使用可能需要安装的FINFO
库。
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $_FILES['userfile']['tmp_name']);
finfo_close($finfo);
现在看起来你已经做了一些工作,以抽象上传的文件,所以你要采取以上,并与相应的完整路径名上传文件替换全局变量。
我不想要文件扩展名,因为我需要能够链接到它 – 2012-04-20 20:03:44
如果是这样的话,为什么你需要将扩展名与文件名分开?难道你不能保存全名,包括扩展名吗?一些操作系统甚至不使用文件扩展名,而只是查看幻数或其他元数据来确定文件类型。 – Anthony 2012-04-20 20:30:27
有CI中的form_validation库插件的MIME类型:http://codeigniter.com/forums/viewthread/123816/
我用它在我的项目,而且运作非常良好。
你使用什么框架???? – Baba 2012-04-19 22:18:59
codeigniter。我会把它放在那里 – 2012-04-19 22:24:51