0

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

当我调试 $this->data['Event']['img'] (表单是调用事件)时,我已经完成了这项工作并且看起来很有效。我得到以下输出:

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 和表单助手,一种保存上传文件的简单方法?

谢谢你提供的所有帮助。

格伦。

4

1 回答 1

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"];
          } 
于 2012-08-13T07:56:33.943 回答