2013-05-04 3 views
0

У меня есть большая форма, которая позволяет пользователям загружать несколько файлов/типов файлов в предлагаемое предложение/ставку, которую они создают. Все работает отлично, за исключением одной части: шифрование имени файлов перед сохранением в базе данных.Codeigniter Multiple File Upload Encryption Issue

Я не нашел рифмы или причины для этого, но это хит или промах. Изображение работает отлично каждый раз. Другие документы (которые допускают все типы [*], но в основном состоят из различных бизнес-документов, таких как pdf, doc, xls и т. Д.) - это те, которые являются пятнистыми.

Я нашел темы на SO и в других местах по общим вопросам с шифрованием имени, но еще не встретил того, что касается специфики моей проблемы.

Вот функция загрузки:

//for multi uploads 
     function do_uploads($name, $file) 
     { 
      $status =""; 
      $msg = ""; 
      $file_element_name = $name; 


      //go through and figure out where it goes 
      if($name == "QuoteDoc") { 
       $folder = "quotedocs"; 
       $allowed = '*'; 
      } 
      else if($name == "ProductOfferPhoto") { 
       $folder = "product_photos"; 
       $allowed = 'jpeg|jpg|png|gif'; 
      } 
      else if($name == "ResearchWhtPaper1" || $name == "ResearchWhtPaper2") { 
       $folder = "research"; 
       $allowed = "*"; 
      } 
      else if($name == "ProductLiterature1" || $name == "ProductLiterature2") { 
       $folder = "literature"; 
       $allowed = "*"; 
      } 
      else if ($name == "FDALink") { 
       $folder = "fda"; 
       $allowed = "*"; 
      } 


      $config['upload_path'] = './uploads/' . $folder; 
      $config['allowed_types'] = $allowed; 
      $config['max_size'] = 1024 * 8; 
      $config['encrypt_name'] = TRUE; 

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

      if (! $this->upload->do_upload($name)) 
      { 
       $status = 'error'; 
       $msg = $this->upload->display_errors('', ''); 
      } 
      else { 
       $data = $this->upload->data(); 
      } 

      @unlink($_FILES[$file_element_name]); 

      //what's up? 
      //return $this->upload->data(); 
      return array('status' => $status, 'msg' => $msg, 'data' => $this->upload->data(), 'allowed'=>$allowed); 
     } 

Любая помощь будет принята с благодарностью.

+0

Итак, какое имя у вас есть? оригинал ? – Aurel

+0

yup, имя файла. –

+0

Извините, но проблема в том, что имена файлов не зашифрованы после процесса загрузки, в '$ this-> upload-> data()'? – Aurel

ответ

1

Вы не указав свой вопрос очень четко:

имена просто не шифруется, но все же загружать в правильные каталоги?

Вы устанавливаете их внутри цикла, где, возможно, экземпляр класса не повторно инициализируется? Правильно ли шифруется первый файл, а не последующие?

Вы можете отслеживать, какие типы файлов не работают корректно?

Я трудно поверить, что это совершенно «случайным», и думаю, что там просто не хватает исследований делается здесь


Решение снизу:

Вы должны использовать $ this-> upload- > initialize ($ config), чтобы изменить конфигурацию, поскольку библиотека будет загружаться только один раз

+0

Извините, я подумал, что с ним было ясно: * имя шифрования * файлов перед сохранением в базе данных. Я вижу, как это может быть немного неоднозначно. Это только проблема шифрования. Имена файлов сохраняются в любом порядке. Файлы 'jpg' никогда не имеют проблемы. Некоторые pdf-файлы, некоторые нет. То же самое для файлов doc/x. Я могу сделать еще несколько тестов, чтобы посмотреть, найду ли я лучший образец. –

+0

И да, эта функция вызывается среди цикла 'foreach'. Спасибо. –

+2

Во-первых: вы должны вернуть $ data, а не $ this-> upload-> data(); Во-вторых: Я подозреваю, что ваша проблема связана с файлами, когда вы переходите от одного типа к другому в своем цикле? Я думаю, вам нужно использовать $ this-> upload-> initialize(); не пытайтесь перезагрузить класс, так как CI уже зарегистрировал его – jmadsen