>我有一个表单,人们在其中选择一个文件,在文本框中键入文件名,然后单击"保存",它应该将文件保存在服务器上。
我希望它工作的方式是:
1)在数据库中插入一行。2) 保存文件名为数据库row_id的文件。(例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);
}
我不会解释任何代码,因为你只需要对代码进行一些更改。
- 采用表单输入文件名(例如:名称="文件名")
- 表单上传
- 如果采用提交按钮,则必须先上传文件
- 检查文件上传是否成功
- 如果成功,则使用"文件名"+上传操作中的MIMETYPE重命名
- 将"文件名"保存到数据库
- 如果上传失败,请转到错误消息,并且"文件名"不会插入到数据库中
您不想要文件扩展名,而是需要 MIME 类型。任何人都可以上传以.jpg
结尾的文件,但这并不意味着它不是一个包含谁知道什么的文本文件。
若要获取 mime 类型,应使用可能需要安装的FINFO
库。
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $_FILES['userfile']['tmp_name']);
finfo_close($finfo);
现在看起来您已经做了一些工作来抽象上传的文件,因此您需要采用上述方法并将全局变量替换为上传文件的适当完整路径名。
在 codeigniter 中有一个用于 mime 类型的form_validation库插件:http://codeigniter.com/forums/viewthread/123816/
我在我的项目中使用它并且工作得很好。
感谢您的帮助。阅读代码点火器文档,我认为在重命名上传的文件时必须包含扩展名。事实证明我没有。一切都修好了。