Ошибка при загрузке изображения Codeigniter 3: имя файла изображения увеличивается, но не обновляется в таблице сообщений - PullRequest
1 голос
/ 12 мая 2019

Я работаю над базовым приложением блога в Codeigniter 3.1.8 и Bootstrap 4.

Каждый пост имеет основное изображение, следовательно, в таблице posts есть столбец post_image.

У меня есть эта проблема, когда изображение поста заменяется новым изображением , которое имеет то же имя (файла) , что и старое: имя файла изображения увеличивается - 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'];
}

Я не знаю, как правильно увеличить его или даже если увеличение является лучшим решением.

Вопрос: Какой самый надежный (надежный) способ решения этой проблемы?


EDIT:

Для согласованности, мне, вероятно, следует обновить исходный (когда сообщение создано ) код загрузки:

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 ]

1 голос
/ 12 мая 2019
// 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');
}

Надеюсь, этот код поможет вам обновить ваш файл

0 голосов
/ 12 мая 2019

Библиотека загрузки автоматически увеличивает файлы с одинаковыми именами. Если вы ранее загрузили my-pic.jpg, а затем загрузили тот же файл, он будет отображаться как my-pic1.jpg. Таким образом, имя файла изменяется библиотекой загрузки.

Вы должны получить новое имя файла с помощью функции $this->upload->data(), которая возвращает набор элементов, связанных с загрузкой вашего изображения.

https://www.codeigniter.com/user_guide/libraries/file_uploading.html#CI_Upload::data

Вам нужно только заменить $post_image = $_FILES['userfile']['name']; на $this->upload->data('file_name') или:

$file = $this->upload->data();
$post_image = $file['file_name']

Обычно я рекомендую не использовать любое имя пользователя для файла. Я бы предложил использовать $config['encrypt_name'] = true, чтобы получить случайное имя. Вышеуказанный метод применим и к этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...