2012-01-13 9 views
2

私は正常に動作し、ファイルをアップロードするには、次のCodeIgniterの機能を使用しています:CodeIgniterのファイルアップロード機能でファイル名を確認し

function uploadFiles(){ 

     $this->load->library('upload'); 
     $error = 0;  
     $projectName = $_POST['projectname']; 
     $projectID = $_POST['maxid']; 
     $folderName = $this->config->item('upload_dest')."/".$projectName."_".$projectID; 
     if(!file_exists ($folderName)){ 
      $aa = mkdir($folderName); 
     } 

     $config['upload_path'] = $folderName; 
     $config['allowed_types'] = 'xml'; 
     //$config['allowed_types'] = '*'; 
     $config['max_size']  = '0'; 
     $config['overwrite']  = TRUE; 

     $this->upload->initialize($config); 

     for($i=0; $i<count($_FILES['files']['name']); $i++) 
     { 

      $_FILES['userfile']['name'] = $_FILES['files']['name'][$i]; 
      $_FILES['userfile']['type'] = $_FILES['files']['type'][$i]; 
      $_FILES['userfile']['tmp_name'] = $_FILES['files']['tmp_name'][$i]; 
      $_FILES['userfile']['error']  = $_FILES['files']['error'][$i]; 
      $_FILES['userfile']['size'] = $_FILES['files']['size'][$i]; 

       if($this->upload->do_upload()) 
       { 
       $error += 0; 
       }else{ 
       $error += 1; 
       } 
     } 

     if($error > 0){ 
      $this->upload->display_errors(); 
      return FALSE; 
     } 
     else{ 
      return TRUE; 
     } 

    } 

私がする必要がどのようなものです - 必ず少なくとも一つのことを確認するチェックアップロードされているファイルの名前は "etl"です。ユーザーが選択したファイルリストにそのようなファイルがない場合は、アクションを停止し、何もアップロードせずにフォーム検証エラーを返します。誰もがこれについてアドバイスできますか?

ありがとうございました。

答えて

1

まず、アップロードする前にファイルの名前を取得する方法がないので、ファイルのプロパティを取得するためにアップロードする必要があります。したがって、利用できるオプションは次のとおりです。

(1)ファイルをアップロードしてから、名前を取得し、「etl」が含まれているかどうかを確認します。あなたが探しているものが含まれていない場合は、アップロードしたばかりのファイルを削除し、あなた自身でカスタムエラーメッセージを設定してください。 このアプローチでは、最初に不要なものをアップロードしてから削除することができるため、非常に大きなオーバーヘッドコストが発生します。非常に貧しいですが、問題を解決します。

(2)一方、javascriptの解決策です。アップロードするフィールドに共通のクラス名を与えます 例えば "userfile1"、 "userfile2" .......

そして、jqueryを使用してフォームの送信を傍受し、forループを使用してそれぞれのファイルアップロードフィールドの値を取得します。そこからファイルの完全な名前と拡張子を取得し、次に "etl"比較を行います。

すなわち

<script type="text/javascript" > 
    $("#formname").submit(function(){ 
    $(".classname").each(function(){ 
     if($(this).val().indexOf("etl") != -1){ 
     return true; 
     } 
    }); 
    /* 
    *whatever makes it finish executing that loop and the execution of code gets 
    *to this point, then the string "etl" was not found in any of the names. 
    */ 
    // write a piece of code to show an hidden error field 
    $("#hidden_error_div").text("Your error message").show(); 
    return false; //makes sure the form is not submitted. 
    }); 
</script> 

・ホープ、このことができます。

+0

この質問(http://stackoverflow.com/questions/9277247/check-if-a-file-isgoing-to-be-uploaded-codeigniter)で受け付けられた回答は、ファイルPHPを使用して 'do_upload()'を呼び出す前にアップロードフィールドで選択されました。 –

0

Oyekunmiは、実際にサーバーに到達する前に、傍受するための優れたjavascriptソリューションを提供します。 Oyekunmiが指摘しているように、そこに到着すると、パッケージとしてそこに到着するので、一時的なディレクトリに保存して処理し、そこで各ファイルを評価し、それに従って処理することができます。

関連する問題