我正在使用Codeigniter 3.1.8和Bootstrap 4中的基本博客应用。
每个帖子都有主图像,因此post_image
表中有一个posts
列。
当帖子的图片替换为与旧的(文件)名称相同的新图片时,我遇到了这个问题:图片文件名增加了-mypic.jpg变为mypic1.jpg-但posts
表中的文件名字符串未更新。
代码是这样,我相信我已经确定了问题的根源(注释):
if(!$this->upload->do_upload()){
$errors = array('error' => $this->upload->display_errors());
//Keep the current image name in the posts table
//If no new image is loaded
$post_image = $this->input->post('postimage');
} else {
$data = array('upload_data' => $this->upload->data());
// This line is the source of the problem
$post_image = $_FILES['userfile']['name'];
}
我不知道如何适当地增加它,即使增加是最好的解决方案。
问题:解决此问题的最可靠(可靠)方法是什么?
编辑:
为了保持一致,我可能应该更新初始的(创建帖子时创建)上传代码:
if (!$this -> upload -> do_upload()) {
$errors = array('error' => $this -> upload -> display_errors());
$post_image = 'default.jpg';
} else {
$data = array('upload_data' => $this -> upload -> data());
$post_image = $_FILES['userfile']['name'];
}
答案 0 :(得分:1)
// This is the check for new file is upload or not
if ( isset($_FILES['userfile']['name']) && $_FILES['userfile']['name'] != null )
{
// Use name field in do_upload method
if (!$this->upload->do_upload('userfile')) {
// If any problem in uploading
$errors = array('error' => $this->upload->display_errors());
} else {
$data = $this->upload->data();
// This is your new upload file name
$post_image = $data[ 'raw_name'].$data[ 'file_ext'];
}
}
else {
// This is your old file name if user not uploading new file
$post_image = $this->input->post('postimage');
}
希望此代码将帮助您更新文件
答案 1 :(得分:0)
上传库会自动增加相同名称的文件。如果您先前上传了 static insertDetails(var response) async {
print('Token is : ${response['token']}');
print('userID is : ${response['userID']}');
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(authTokenKey, response['token']);
prefs.setString(userIdKey, response['userID']);
}
,然后又上传了相同的文件,则它将显示为my-pic.jpg
。因此,文件名由上传库修改。
您必须通过函数my-pic1.jpg
获取新文件名,该函数返回一堆与您的图片上传相关的项目。
https://www.codeigniter.com/user_guide/libraries/file_uploading.html#CI_Upload::data
您只需将$this->upload->data()
替换为$post_image = $_FILES['userfile']['name'];
或:
$this->upload->data('file_name')
通常,我建议不要对文件使用任何用户提供的名称。我建议使用$file = $this->upload->data();
$post_image = $file['file_name']
获得一个随机名称。上面的方法也适用于此。