2010-10-12 85 views

回答

5

編輯(2015年):請參閱Awesome CakePHP列表當前文件的插件(2.x的分支here


原來的答覆:

CakePHP的上傳在積極開發插件(如十月的2010):

您也可以使用File class,但我不會在這一個上重新發明輪子。

+1

相關:http://stackoverflow.com/questions/3148203/best-practice-to-upload-files-in-cakephp/3162144#3162144 – deizel 2010-10-12 12:22:51

+1

你錯過了https://github.com/burzum/cakephp-file -storage – burzum 2015-08-04 08:12:16

+1

謝謝@burzum,我已經指出了現在維護的列表的兩個答案:) – deizel 2015-08-04 19:29:20

0

此組件可以幫助您:http://cakeforge.org/snippet/detail.php?type=snippet&id=36。 允許使用FTP上傳到數據庫或目錄。我有一些CakePHP的經驗,但是我還沒有嘗試過這個組件。

+0

Cakeforge不再使用(在2008年底通過thechaw取代,然後在2009年年底的GitHub),只保留現場提供的舊代碼存檔。這個特定的組件是爲CakePHP 1.2編寫的,並且自1.3穩定以來並沒有更新。 – deizel 2010-10-12 12:35:11

0

要開始嘗試這個。

我花了兩天的時間尋找上傳文件的簡單方法,我嘗試了很多方法,無法使用任何工具。這工作。這是不安全的,它是超級基礎。對我來說,現在是一個跳板。我會用這個來理解過程。然後你就可以在複雜的環境中構建它。

對我來說,我努力嘗試保存$this->data - 但因爲它不像cakePHP博客教程。你想要的數據(所有的文件信息)在嵌套數組中被埋入幾層,所以$this->data['Doc']['files']就是你所追求的。

SQL

CREATE TABLE IF NOT EXISTS `docs` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(300) NOT NULL, 
    `type` varchar(300) NOT NULL, 
    `tmp_name` varchar(300) NOT NULL, 
    `error` tinyint(1) NOT NULL, 
    `size` varchar(100) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; 

模型

<?php 
    class Doc extends AppModel { 
    } 
?> 

VIEW

<h1>Uploads</h1> 
<table> 
    <tr> 
     <th>ID</th><th>File Name</th><th>Size</th> 
    </tr> 
<?php foreach($files as $file): ?> 
    <tr> 
     <td><?php echo $file['Doc']['id'];?></td> 
     <td><?php echo $this->Html->link($file['Doc']['name'],array('controller' => 'files','action'=>'uploads',$file['Doc']['name']));?></td> 
     <td><?php echo number_format($file['Doc']['size']/1023,0).' KB';?></td> 
    </tr> 
<?php endforeach;?> 
</table> 

<h1>Add a File</h1> 
<?php 
echo $this->Form->create('Doc',array('type'=>'file')); 
echo $this->Form->file('File'); 
echo $this->Form->submit('Upload'); 
echo $this->Form->end(); 
?> 

CON TROLLER

<?php 
class DocsController extends AppController 
{ 
    public $helpers = array('Html','Form','Session'); 
    public function index() 
    { 
     // -- list the files -- // 
     $this->set('files',$this->Doc->find('all')); 
     // -- Check for error -> Upload file to folder -> Add line to database -- // 
     if($this->request->is('post')) 
     { 
      if($this->data['Doc']['File']['error']=='0') 
      { 
       if(file_exists('files/uploads/' . $this->data['Doc']['File']['name'])) 
       { 
        $this->Session->setFlash('A file called ' .$this->data['Doc']['File']['name']. ' already exists'); 
       } else { 
        move_uploaded_file($this->data['Doc']['File']['tmp_name'], 'files/uploads/' . $this->data['Doc']['File']['name']); 
       } 
       $this->Doc->save($this->data['Doc']['File']); 
       $this->redirect(array('action'=>'index')); 
      } 
     } 
    } 
} 
?>