2016-03-22 7 views
-1

現在、私のCakephp 3プロジェクトでファイルのアップロードを可能にしようとしています。デバッグText :: uuid()と実際のアップロードされたファイルパスの不一致Cakephp 3

public function send($data) 
{ 
    if (!empty($data)) { 
     if (count($data) > $this->maxFiles) { 
      throw new InternalErrorException("Error Processing Request. Max number files accepted is {$this->max_files}", 1); 
     } 
     $fileNames = []; 
     $count = 0; 
     foreach ($data as $file) { 
      $filename = $file['name']; 
      $file_tmp_name = $file['tmp_name']; 
      $dir = WWW_ROOT.'img'.DS.'uploads'; 
      $allowed = ['png', 'jpg', 'jpeg']; 
      if (!in_array(substr(strrchr($filename , '.') , 1) , $allowed)) { 
       // Iterate through extension to sum up what types of files are allowed to upload 
       $output = "Error Processing Request. It is only allowed to upload files with the following extensions: "; 
       foreach($this->allowed as $extension){ $output .= $extension . ' '; } 
       throw new InternalErrorException($output, 1); 
      }elseif(is_uploaded_file($file_tmp_name)){ 
       debug(Text::uuid().'-'.$filename); 
       debug($file_tmp_name); 
       move_uploaded_file($file_tmp_name, $dir.DS.Text::uuid().'-'.$filename); 
      } 
     } 
    } 
} 

この機能は、実際にファイルを保存した:私は、Webルート/ IMG /アップロードに(の$ this - >要求 - を介して入力として与えられている>データ)のファイルを保存し、私のアップロードコンポーネントに以下の機能を持っています指定されたフォルダではなく、Text :: uuid()。 '' $ファイル名をデバッグするときとは異なるファイル名を使用しています。

デバッグ出力:ウェブルート/ IMG /アップロードフォルダに

f5b0ca4f-cb73-4382-b1ca-0eee232ab17a-phinx.png 


ファイル名:

4a635fa6-98ea-461e-a98d-0f6ac34c65e7-phinx.png 

私の質問は:誰もがそのファイルの名前をつかむ方法を知っていませんwebroot/img/uploadsフォルダにアップロードされますか?私がこれをやりたいのは、これらのパスをデータベースに保存したいということです。

+1

「Text :: uuid()」は、呼び出されるたびに** different ** unique idを返します。 '' Text :: uuid() ''を変数に保存して使ってみるのはどうでしょうか? '' $ file_tmp_name、$ dir.DS. $ myvar。 ''。$ filename''のように? – gmponos

+0

クイック返信ありがとう:)。これは私のために働いた、自分自身の愚か。私は少なくとも48時間以内に正しい答えに印を付けることができます。多分誰かがそれをマークできますか? – markvdlaan93

+0

@gmponosは答えとしてそこにコメントを入れる必要があるので、OPはそれを受け入れたとマークすることができます。 –

答えて

0

gmponosのおかげで、Text :: uuid()のIDを別の変数に格納することが重要です。これは私のために働いた。

public function send($data) 
{ 
    if (!empty($data)) { 
     if (count($data) > $this->maxFiles) { 
      throw new InternalErrorException("Error Processing Request. Max number files accepted is {$this->max_files}", 1); 
     } 
     $fileNames = []; 
     $count = 0; 
     foreach ($data as $file) { 
      $filename = $file['name']; 
      $file_tmp_name = $file['tmp_name']; 
      $dir = WWW_ROOT.'img'.DS.'uploads'; 
      $allowed = ['png', 'jpg', 'jpeg']; 
      if (!in_array(substr(strrchr($filename , '.') , 1) , $allowed)) { 
       // Iterate through extension to sum up what types of files are allowed to upload 
       $output = "Error Processing Request. It is only allowed to upload files with the following extensions: "; 
       foreach($this->allowed as $extension){ $output .= $extension . ' '; } 
       throw new InternalErrorException($output, 1); 
      }elseif(is_uploaded_file($file_tmp_name)){ 
       $uuid = Text::uuid(); 
       move_uploaded_file($file_tmp_name, $dir.DS.$uuid.'-'.$filename); 
      } 
     } 
    } 
} 
関連する問題