[英]file upload in cakephp
How can I upload a file using cakephp? 如何使用cakephp上传文件? is there any framework support for file uploading or should I write my own code for this ?
文件上传是否有任何框架支持,或者我应该为此编写自己的代码?
Edit (2015): Please see the Awesome CakePHP list for current file plugins (2.x branch here ) 编辑(2015):请参阅Awesome CakePHP列表以获取当前文件插件( 此处为2.x分支)
Original answer: 原始答案:
CakePHP upload plugins in active development (as of Oct 2010):
CakePHP正在积极开发中上传插件(截至2010年10月):
- David Persson's Media Plugin [ slides ]
David Persson的媒体插件 [ 幻灯片 ]
- WebTechNick's CakePHP File Upload Handling Plugin [ blog post ]
WebTechNick的CakePHP文件上传处理插件 [ 博客文章 ]
- Miles Johnson's Uploader Plugin [ website ]
Miles Johnson的Uploader插件 [ 网站 ]
- Meio Código's MeioUpload 2.0 Behavior Plugin [ website ]
MeioCódigo的MeioUpload 2.0行为插件 [ 网站 ]
You could also use the File class , but I wouldn't reinvent the wheel on this one.
您也可以使用File类 ,但是我不会在这个类上重新发明轮子。
both is possible 两者都有可能
for beginners this is probably the better choice: http://www.milesj.me/resources/script/uploader-plugin 对于初学者来说,这可能是更好的选择: http : //www.milesj.me/resources/script/uploader-plugin
To just get going try this. 要开始尝试这个。
I spent two days searching for a simple way to upload files, I tried lots of methods and couldn't get any to work. 我花了两天时间寻找一种上传文件的简单方法,我尝试了很多方法,但没有任何效果。 This works.
这可行。 It is not secure, it is super basic.
它是不安全的,它是超基本的。 For me it is now a springboard.
对我来说,现在是一个跳板。 I would use this to understand the processes.
我将用它来了解流程。 Then you can build it up in complexity.
然后,您可以提高其复杂性。
For me I struggled with trying to save $this->data
- but of cause it is not like the cakePHP blog tutorial. 对我来说,我在尝试保存
$this->data
很费劲-但是,它的原因不像cakePHP博客教程。 The data you want (all the file info) is buried a couple of levels down in nested arrays so $this->data['Doc']['files']
is what you are after. 您想要的数据(所有文件信息)被嵌套在嵌套数组中
$this->data['Doc']['files']
因此$this->data['Doc']['files']
是您所追求的。
SQL 的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 ;
MODEL 模型
<?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();
?>
CONTROLLER 控制器
<?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'));
}
}
}
}
?>
This component could help you out: http://cakeforge.org/snippet/detail.php?type=snippet&id=36 . 该组件可以帮助您: http : //cakeforge.org/snippet/detail.php?type=snippet&id=36 。 Allows uploads to either a database or a directory using FTP.
允许使用FTP上传到数据库或目录。 I have some experience with CakePHP, however I have not yet tried this component.
我对CakePHP有一定的经验,但是我还没有尝试过此组件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.