2013-05-04 78 views
0

我有一個很大的表單,允許用戶上傳多個文件/文件類型到他們正在創建的報價/出價。除了一件事之外,一切都運行良好:在保存到數據庫之前對文件進行名稱加密。Codeigniter多文件上傳加密問題

我還沒有找到它的韻或理由,但它的命中或錯過。該圖像每次都能正常工作。其他文件(允許所有[*]類型,但主要包括各種業務文檔,例如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 2013-05-04 18:09:57

+0

是,文件名。 – 2013-05-04 19:29:59

+0

對不起,但問題是上傳過程後,'$ this-> upload-> data()'中沒有加密文件名? – Aurel 2013-05-04 19:41:16

回答

1

你不是說明你的問題很清楚:

是名字根本就沒有被加密,但仍然上傳到正確的目錄?

你是否將這些設置在一個循環中,其中類實例可能沒有被重新初始化?第一個文件是否正確加密,但不是後面的文件?

你能跟蹤哪些文件類型工作不正常嗎?

我都很難相信它是完全「隨機」,並認爲這只是沒有足夠的研究這裏正在做從下


解決方案:

您需要使用$這 - > upload- >初始化($ config)更改配置,因爲該庫只會加載一次

+0

對不起,我想我已經清楚了:*保存到數據庫之前,文件的名稱加密*。不過,我可以看到它可能有點模棱兩可。這只是加密部分是一個問題。文件名保存方式就好了。 'jpg'文件從來沒有問題。有些pdf可以,有些不會。 doc/x文件一樣。我可以做更多的測試,看看我是否找到了更好的模式。 – 2013-05-05 01:52:15

+0

是的,這個函數在一個'foreach'循環中被調用。謝謝 - – 2013-05-05 01:56:35

+2

第一:你應該返回$ data,而不是$ this-> upload-> data();第二:當您在循環中從一種類型更改爲另一種類型時,我懷疑您的問題與文件有關?我認爲你需要使用$ this-> upload-> initialize();不要嘗試重新加載班級,因爲CI已經將其註冊了 – jmadsen 2013-05-05 02:42:56