Sha*_*bib 1 php mysql file-upload codeigniter-2
我正在尝试重命名图像文件并将文件位置保存在数据库中。我遇到了问题,因为我想将文件命名为我要插入的表行的 id。上传并插入后,我想看到我的表,如下所示:
----------------------------------------
| id | name | category | image |
----------------------------------------
| 1 | foo | category | uploads/1.jpg |
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
id 字段自动递增。这是我的代码:
function service()
{
$con=$this->do_upload();
$id=mysql_insert_id();
$data=array(
'name'=>$this->input->post('name'),
'category'=>$this->input->post('category'),
'image'=>'uploads/'.$id.$con['file_ext'];
);
$query=$this->db->insert('table',$data);
return $query;
}
Run Code Online (Sandbox Code Playgroud)
这不是正确的方法,并且假设文件没有按需要保存在数据库中。而不是将其保存为“uploads/1.jpg”,而是将其保存为“uploads/0.jpg”。
任何人都可以为我提供正确的约定来做到这一点吗?注意我正在使用codeigniter 2.1.0和mySQL数据库。
mysql_insert_id
如果之前没有调用 mysql 查询,则无法访问 id 。您必须插入新记录然后更新它。与新文件名。
编辑:
当我将图像/其他文件上传到服务器时,我总是用一些随机哈希重命名它们。因此,文件在文件系统上具有唯一的哈希名称,并且在 mysql 行中仅设置了此哈希来将数据库行与文件相关联。
因此,在将新记录插入数据库之前,生成一些随机字符串并检查具有该名称的文件是否已存在:
$filename = '';
do {
$filename = substr(md5(uniqid(rand(), true)), 0, 8);
} while ( !file_exists('uploads/'.$filename) );
Run Code Online (Sandbox Code Playgroud)
在方法中执行此do_upload
操作并让它以$con
数组形式返回文件名。
归档时间: |
|
查看次数: |
3498 次 |
最近记录: |