Переименовать файл Codeigniter при загрузке

Я пытаюсь добавить время как префикс имени изображения вместе с оригинальным именем при загрузке, но я не мог понять это. Пожалуйста, помогите мне со следующим кодом, чтобы добавить приставку к исходному имени файла при загрузке.

<?php

class Upload extends CI_Controller {

    function __construct()
    {
        parent::__construct();
        $this->load->helper(array('form', 'url'));
    }

    function index()
    {
        $this->load->view('upload_form', array('error' => ' ' ));
    }

    function do_upload()
    {


        $config['upload_path'] = 'Public/uploads/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '1024';
        $config['max_width']  = '1024';
        $config['max_height']  = '768';



        $this->load->library('upload', $config);


        if ( ! $this->upload->do_upload())
        {
            $error = array('error' => $this->upload->display_errors());

            $this->load->view('upload_form', $error);
        }
        else
        {
            $data = array('upload_data' => $this->upload->data());

            $this->load->view('upload_success', $data);
        }
    }
}
?>

Ответы

Ответ 1

Вы можете зашифровать имя файла с помощью встроенного параметра CI:

$config['encrypt_name'] = TRUE;

ИЛИ

Вы можете сделать это с помощью собственного кода:

$new_name = time().$_FILES["userfiles"]['name'];
$config['file_name'] = $new_name;

Ответ 2

По некоторым причинам последовательные вызовы функции do_upload не работают. Он придерживается первого имени файла, установленного первым вызовом функции

$small_photo_url  = $this->upload_photo('picture_small',  $this->next_id.'_small ');
$medium_photo_url = $this->upload_photo('picture_medium', $this->next_id.'_medium');
$large_photo_url  = $this->upload_photo('picture_large',  $this->next_id.'_large ');

Все имена файлов будут "00001_small", "00001_small1", "00001_small2" учитывая следующие конфигурации

function upload_photo($field_name, $filename)
{
    $config['upload_path'] = 'Public/uploads/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '1024';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';
    $config['file_name'] = $filename;

    $this->load->library('upload', $config);

    if ( ! $this->upload->do_upload())...

Я думаю, потому что эта строка не работает во второй раз, когда вы ее вызываете. Он не устанавливает конфигурации снова

$this->load->library('upload', $config);

=============================================== =========================== Решение проблемы, возникающей во время последовательных вызовов функции do_upload:

// re-initialize upload library
$this->upload->initialize($config);

Ответ 3

Для чего вы точно ищете, это сработало для меня:

$path = $_FILES['image']['name'];
$newName = "<Whatever name>".".".pathinfo($path, PATHINFO_EXTENSION); 

Ответ 4

$config['file_name'] = $new_name;

Просто добавьте его в соответствие с кодами конфигурации.

Ответ 5

Это должно быть после загрузки.

Обработать имя файла, которое вы хотите здесь:

$a=$this->upload->data();         
rename($a['full_path'],$a['file_path'].'file_name_you_want');

Ответ 6

Попробуй это:

$config['file_name'] = "yourCustomFileName";

Ответ 7

        /* Conf */
        $new_name                   = time().$_FILES["userfiles"]['name'];
        $config['file_name']        = $new_name;
        $config['upload_path']      = './upload/';
        $config['allowed_types']    = 'gif|jpg|png';
        $config['max_size']         = '';
        $config['max_width']        = '';
        $config['max_height']       = '';
        $config['file_ext_tolower'] = TRUE;

      /*  Load the upload library  */   
        $this->load->library('upload', $config);