使用CakePHP上传文件(PDF和图像)

时间:2012-08-12 16:56:01

标签: php cakephp

我想要做的事我以前从未做过。我正在使用CakePHP来构建表单,我使用表单助手来执行此操作。这一切都适用于输入和textareas但我现在正试图将我的两个输入更改为文件上传字段。

当我调试$ this-> data ['Event'] ['img'](表单调用Event)时,我已经完成了这项工作。我得到以下输出:

Array
 (
   [name] => logo.gif
   [type] => image/gif
   [tmp_name] => /tmp/phpaU3aBa
   [error] => 0
   [size] => 7318
 )

现在我在这里做客,但我必须将文件保存到我的'webroot'文件夹中。我做了路径/ webroot / eventfiles / img& webroot / eventfiles / pdf - 我现在开始只做图像,所以我可以让它工作,但我要上传的其他文件类型是pdf。

现在我已经看过CakePHP网站上的内容,但我只是说看看PHP网站,似乎有很多方法可以做到这一点,但我不知道如何保存它。这样我以后就可以访问它,例如它会进入webroot文件夹,以便Cake可以看到它。

另外作为旁注,还需要将路径+文件名保存到数据库中。除非我错了,否则这应该很简单,只需使用$ this-> data ['Event'] ['img'] ['name'],这样就可以将其保存到我的数据库中。

请帮帮忙?我已经做了好几天了。我似乎无法理解文件上传。有一个简单的方法来做到这一点?例如像Cake和HTML一样的&表单助手,一种保存上传文件的简单方法吗?

感谢您提供的任何帮助。

格伦。

1 个答案:

答案 0 :(得分:0)

虽然我会发布我的答案,这完全有效。我从两个文件输入文件中获取pdf和jpeg图像,然后将其重命名为用户在输入文本字段中提供的给定标题。使用$ newevent中的两个变量,这些变量将与其他输入一起保存到数据库,路径和重命名的图像中。

这段代码非常简单。这段代码的主体来自这个网站上的帖子,我刚刚更改它以供我使用。

如果您还尝试添加/上传不同的文件类型,例如doc或png,您需要知道的是要上传的文档的标题类型,并将其添加到if语句中。

希望这会帮助别人!

格伦。

            $pathimg = "/eventfiles/img/";
            $pathpdf = "/eventfiles/pdf/";
            $dir_pdf = getcwd().$pathpdf;
            $dir_img = getcwd().$pathimg;
            $PDF_Path = $dir_pdf .  $this->data['Event']['pdf']["name"];
            $IMG_Path = $dir_img .  $this->data['Event']['img']["name"];
            $IMG_WithOutSpace = preg_replace('/\s+/', '_', $newevent['title']);
            $PDF_WithOutSpace = preg_replace('/\s+/', '_', $newevent['title']);

            $newevent['img'] = "/vh/eventfiles/img/" . $IMG_WithOutSpace . ".jpg";
            $newevent['pdf'] = "/vh/eventfiles/pdf/" . $PDF_WithOutSpace . ".pdf";

        if ((( $this->data['Event']['img']["type"] == "application/pdf") || ( $this->data['Event']['img']["type"] == "image/jpeg"))) {
          if (($this->data['Event']['img']["error"] > 0) || ($this->data['Event']['pdf']["error"] > 0)) {
            $this->Session->setFlash(__('An error has occured during updating. Please check all the fields.', true), 'default', array('class' => 'error-message'));
            $this->redirect($this->referer());
            exit();
          } else {

              move_uploaded_file( $this->data['Event']['img']["tmp_name"], $IMG_Path);
              rename($IMG_Path, $dir_img . $IMG_WithOutSpace. ".jpg");

              move_uploaded_file( $this->data['Event']['pdf']["tmp_name"], $PDF_Path);
              rename($PDF_Path, $dir_pdf . $PDF_WithOutSpace . ".pdf");

              $filename= $this->data['Event']['pdf']["name"];
              $filename= $this->data['Event']['img']["name"];
          }