2012-08-28 84 views
2

我只是想知道是否有辦法限制文件輸入對話框只顯示某些類型的文件。我的網頁只能接受.bin或.gz文件類型,但用戶可以選擇其他文件類型並嘗試上傳它們。限制CakePHP文件輸入中的文件類型

什麼是防止上傳錯誤文件類型的最佳方法?

這裏是我的文件上傳控制器:

public function uploadFile() 
    { 
     $this->Session->write('isFileUpload', false); 
     $this->Session->write('isFileLarge', false); 

     if($this->request->is('post')) 
     { 
      $uploadedFile = array(); 

      // Check if the Document object is set 
      // If it is set, process the file for uploading, 
      if(isset($this->request->data['Document'])) 
      { 
       $filename = $this->request->data['Document']['MyFile']['tmp_name']; 

       $uploadedFile['MyFile']['name'] = $this->request->data['Document']['MyFile']['name']; 
       $uploadedFile['MyFile']['type'] = $this->request->data['Document']['MyFile']['type']; 
       $uploadedFile['MyFile']['size'] = $this->request->data['Document']['MyFile']['size']; 

       // Move the file to the /home/spectracom folder 
       $filePath = DS . 'home' . DS . $uploadedFile['MyFile']['name']; 

       if (move_uploaded_file($filename, $filePath)) 
       { 
        $this->Session->write('isFileUpload', true); 
        $this->Session->write('isFileLarge', false); 
        $this->redirect('/tools/upgradebackup'); 
       } 
       else 
       { 
        $this->Session->write('isFileUpload', false); 
        $this->Session->write('isFileLarge', true); 
        $this->redirect('/tools/upgradebackup'); 
       } 
      } 
      else 
      { 
       $this->Session->write('isFileUpload', false); 
       $this->Session->write('isFileLarge', true); 
       $this->redirect('/tools/upgradebackup'); 
      } 
     } 
    } 

我基本檢查文件是否存在,否則過大,當它返回到主升級頁面它設置會話變量。

感謝

回答

5

您限制哪些瀏覽器允許用戶在使用accept attribute文件選擇對話框中選擇,雖然不是所有的瀏覽器都支持它。

我想這應該創建輸入工作(你需要用MIME類型上所扮演看看有什麼效果):

echo $this->Form->input('MyFile', array('type' => 'file', 'options' => array('accept' => 'application/gzip,application/gzipped,application/octet-stream')));

你也應該確認文件,一旦他們抵達該服務器通過設置validation on your model(查看extensionmimeType驗證規則)。

一旦用戶選擇了文件擴展名,您還可以使用JavaScript來驗證文件擴展名,如果文件擴展名錯誤,則清除文件輸入字段。

+0

我接觸過這一點。我在服務器端驗證,檢查正確的文件類型。但我也想知道如何限制它的客戶端。我只希望人們只能看到某些文件類型。 – RXC

+0

我剛做了一些快速研究後更新了答案。在可用的情況下使用accept屬性,然後使用JS和模型驗證。 – bjudson

+0

謝謝你。你會知道如何將接受納入這個嗎? 'echo $ this-> Form-> input('MyFile',array('type'=>'file'));' – RXC

0

測試使用CakePHP 3.4

$this->Form->control('my_file', ['label' => 'Upload File','type' => 'file', 'accept' => 'application/msword']);