Получить переименованные имена файлов форм JavaScript в CodeIgniter - PullRequest
0 голосов
/ 05 октября 2009

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

uploadform.php:

 echo form_open_multipart('gallery/upload');
  <input type="file" name="photo" size="50" />
  <input type="file" name="thumb" size="50" />  
  <input type="submit" value="Upload" />
 </form>

gallery_model.php

 function multiple_upload($upload_dir = 'uploads/', $config = array())
 {

  /* Upload */  

     $CI =& get_instance();
     $files = array();

     if(empty($config))
     {
         $config['upload_path']   = realpath($upload_dir);
         $config['allowed_types'] = 'gif|jpg|jpeg|jpe|png';
         $config['max_size']      = '2048';
     }

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

        $errors = FALSE;

        foreach($_FILES as $key => $value)
        {            
            if( ! empty($value['name']))
            {
                if( ! $CI->upload->do_upload($key))
                {                                           
                    $data['upload_message'] = $CI->upload->display_errors(ERR_OPEN, ERR_CLOSE); // ERR_OPEN and ERR_CLOSE are error delimiters defined in a config file
                    $CI->load->vars($data);

                    $errors = TRUE;
                }
                else
                {
                    // Build a file array from all uploaded files
                    $files[] = $CI->upload->data();
                }
            }
        }


        // There was errors, we have to delete the uploaded files
        if($errors)
        {                    
            foreach($files as $key => $file)
            {
                @unlink($file['full_path']);    
            }                    
        }
        elseif(empty($files) AND empty($data['upload_message']))
        {
            $CI->lang->load('upload');
            $data['upload_message'] = ERR_OPEN.$CI->lang->line('upload_no_file_selected').ERR_CLOSE;
            $CI->load->vars($data);
        }
        else
        {
            return $files;


        }



        /* -------------------------------
        Insert to database */

        // problem is here, i need file names to add db. 
        // if there is already same names file at the folder, it rename file itself. so in such case, I need renamed file name :/



    }    
}

1 Ответ

1 голос
/ 07 октября 2009

Вы должны хранить свою модель только для операций с базой данных. Вся обработка загрузки и перемещение файлов должны выполняться в контроллере. Модель должна вставить запись о фотографии в базу данных и все.

И в ответ на ваш вопрос сделайте print_r($files) и посмотрите, что в нем содержится. Он должен иметь оригинальные имена файлов. Возможно, это будет что-то вроде артмании, сказанной выше: $files[0]['file_name']. Вы должны иметь возможность перебирать свой массив $ files с помощью конструкции foreach, подобной этой:

foreach($files as $file) {
  $file_name = $file['file_name'];
}

Таким же образом вы можете получить все остальные данные о файле. Руководство CodeIgniter говорит о $this->upload->data():

Это вспомогательная функция, которая возвращает массив, содержащий все данные связанные с файлом, который вы загрузили. Вот является прототипом массива:

Array
(
    [file_name]    => mypic.jpg
    [file_type]    => image/jpeg
    [file_path]    => /path/to/your/upload/
    [full_path]    => /path/to/your/upload/jpg.jpg
    [raw_name]     => mypic
    [orig_name]    => mypic.jpg
    [file_ext]     => .jpg
    [file_size]    => 22.2
    [is_image]     => 1
    [image_width]  => 800
    [image_height] => 600
    [image_type]   => jpeg
    [image_size_str] => width="800" height="200"
)

Подробнее ознакомьтесь с руководством .

...