Codeigniter 3图片上传错误:图片文件名已增加,但帖子表中未更新

时间:2019-05-11 23:19:37

标签: php codeigniter codeigniter-3

我正在使用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'];
}

2 个答案:

答案 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'] 获得一个随机名称。上面的方法也适用于此。