我正在尝试将文件上传到webroot / files目录。 我还在我的数据库表中包含了该文件的记录。
将文件保存到数据库是可行的,我使用move_uploaded_file()方法,但它不起作用。它不会返回任何错误,但文件不会显示在files文件夹中。我检查了权限,他们都是755。 这是我的控制器中的动作:
if ($this->request->is('post'))
{
$uploadedFile = array();
$filename = $this->request->data['Document']['MyFile']['name'];
$fileData = fread(fopen($this->request->data['Document']['MyFile']['tmp_name'], "r"), $this->request->data['Document']['MyFile']['size']);
$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'];
$uploadedFile['MyFile']['data'] = $fileData;
$filePath = WEBROOT_DIR . DS . 'files' . DS . $uploadedFile['MyFile']['name'];
debug($filePath);
if (move_uploaded_file($filename, $filePath))
{
echo "No Error";
$this->Session->setFlash('Uploaded file has been moved SUCCESS.');
}
else
{
$this->Session->setFlash('Unable to Move file.');
}
if ($this->MyFile->save($uploadedFile))
{
$this->Session->setFlash('Uploaded file has been saved.');
}
else
{
$this->Session->setFlash('Unable to save file.');
}
}
这是debug($filePath);
的输出
'webroot / files / filename' - >其中filename是上传文件的实际名称。
任何帮助都会很棒。 感谢
更新---------------------------------------------- - 我调试了$ this-> request->数据,这是我上传小文件时的输出。
array(
'Document' => array(
'MyFile' => array(
'name' => 'add.ctp',
'type' => 'application/octet-stream',
'tmp_name' => '/tmp/phpcxBA9B',
'error' => (int) 0,
'size' => (int) 3700
)
)
)
我还在move_uploaded_file()
下面添加了一条else语句,它确实将flash设置为无法移动文件。
我仍然不确定原因,是$filename
和$filePath
变量吗?
由于
答案 0 :(得分:1)
您是否尝试过使用常量WWW_ROOT
代替WEBROOT_DIR
?
您需要提供文件系统的路径。
答案 1 :(得分:1)
您需要移动'tmp_name',即
$filename = $this->request->data['Document']['MyFile']['tmp_name'];
答案 2 :(得分:1)
你可能会遇到这个问题:
$filePath = WEBROOT_DIR . DS . 'files' . DS . $uploadedFile['MyFile']['name'];
错误信息如下:
move_uploaded_file(webroot\files\File_Name): failed to open stream: No such file or directory [APP\Controller\CustomerController.php cakephp
如果是这样,请将上述行替换为:
$filePath = WWW_ROOT . DS . 'files' . DS . $uploadedFile['MyFile']['name'];
手段,
WEBROOT_DIR . DS .
带
WWW_ROOT .
它将移动上传的文件。