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);
}
}
}
?>
5 answers
Вы можете зашифровать имя файла с помощью встроенной опции CI:
$config['encrypt_name'] = TRUE;
ИЛИ
Вы можете сделать это с помощью своего собственного кода:
$new_name = time().$_FILES["userfiles"]['name'];
$config['file_name'] = $new_name;
По некоторым причинам последовательные вызовы функции 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);
Для того, что вы именно ищете, это сработало для меня:
$path = $_FILES['image']['name'];
$newName = "<Whatever name>".".".pathinfo($path, PATHINFO_EXTENSION);
$config['file_name'] = $new_name;
Просто добавьте его в соответствие с кодами конфигурации.
Это должно быть после загрузки.
Обработайте нужное имя файла здесь:
$a=$this->upload->data();
rename($a['full_path'],$a['file_path'].'file_name_you_want');