【问题标题】:Froala / PHP - image upload failure (something went wrong...)Froala / PHP - 图片上传失败(出了点问题......)
【发布时间】:2018-09-08 21:41:08
【问题描述】:

试图让 Froala 将图像上传到 PHP 环境中的服务器。完全按照 Froala 的例子here

但是,当我选择图像文件并提交时,我收到的反馈是一条错误消息:“出了点问题。请重试”。

我使用了示例中的确切文件/目录名称,但显然我遗漏了一些东西。该目录是图像存储的“上传”目录。

我已经阅读了大多数其他 Stackoverflow cmets 和解决方案,尝试了其中的几个,阅读了 Froala 的信息,但仍然没有成功。

我使用的下面的代码与他们的示例非常相似。

编辑器文件:“index.php”

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">

  <!-- Include external CSS. -->
  <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/codemirror.min.css">

  <!-- Include Editor style. -->
  <link href="https://cdnjs.cloudflare.com/ajax/libs/froala-editor/2.5.1/css/froala_editor.pkgd.min.css" rel="stylesheet" type="text/css" />
  <link href="https://cdnjs.cloudflare.com/ajax/libs/froala-editor/2.5.1/css/froala_style.min.css" rel="stylesheet" type="text/css" />
</head>

<body>
  <!-- Include external JS libs. -->
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/codemirror.min.js"></script>
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/mode/xml/xml.min.js"></script>

  <!-- Include Editor JS files. -->
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/froala-editor/2.5.1//js/froala_editor.pkgd.min.js"></script>
  <div class="sample">
    <h2>File upload example.</h2>
    <form>
      <textarea id="edit" name="content"></textarea>
    </form>
  </div>

  <!-- Initialize the editor. -->
  <script>
    $(function() {
      $('#edit').froalaEditor({
        // Set the file upload URL.
        imageUploadURL: '/upload_image.php',

        imageUploadParams: {
          id: 'my_editor'
        }
      })
    });
  </script>
</body>
</html>

PHP 文件:“upload_image.php”

<?php

try {
  // File Route.
  $fileRoute = "/uploads/";

  $fieldname = "file";

  // Get filename.
  $filename = explode(".", $_FILES[$fieldname]["name"]);

  // Validate uploaded files.
  // Do not use $_FILES["file"]["type"] as it can be easily forged.
  $finfo = finfo_open(FILEINFO_MIME_TYPE);

  // Get temp file name.
  $tmpName = $_FILES[$fieldname]["tmp_name"];

  // Get mime type.
  $mimeType = finfo_file($finfo, $tmpName);

  // Get extension. You must include fileinfo PHP extension.
  $extension = end($filename);

  // Allowed extensions.
  $allowedExts = array("gif", "jpeg", "jpg", "png", "svg", "blob");

  // Allowed mime types.
  $allowedMimeTypes = array("image/gif", "image/jpeg", "image/pjpeg", "image/x-png", "image/png", "image/svg+xml");

  // Validate image.
  if (!in_array(strtolower($mimeType), $allowedMimeTypes) || !in_array(strtolower($extension), $allowedExts)) {
    throw new \Exception("File does not meet the validation.");
  }

  // Generate new random name.
  $name = sha1(microtime()) . "." . $extension;
  $fullNamePath = dirname(__FILE__) . $fileRoute . $name;

  // Check server protocol and load resources accordingly.
  if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] != "off") {
    $protocol = "https://";
  } else {
    $protocol = "http://";
  }

  // Save file in the uploads folder.
  move_uploaded_file($tmpName, $fullNamePath);

  // Generate response.
  $response = new \StdClass;
  $response->link = $protocol.$_SERVER["HTTP_HOST"].dirname($_SERVER["PHP_SELF"]).$fileRoute . $name;

  // Send response.
  echo stripslashes(json_encode($response));

} catch (Exception $e) {
   // Send error response.
   echo $e->getMessage();
   http_response_code(404);
}
?>

【问题讨论】:

    标签: javascript php wysiwyg froala


    【解决方案1】:

    来自他们的网站。

    在进行任何上传之前,必须将上传目录设置为有效位置。路径可以是任何可访问且写入可用的文件夹。

    请检查您的文件夹权限,这是一个常见的疏忽。

    问候

    埃德沃利

    【讨论】:

    • 感谢提示,但还是不行——文件夹有写权限,上传目录与代码参考一致:$fileRoute = "/uploads/";我不认为它需要是完整的路径名?嗯...
    【解决方案2】:

    通过执行以下操作使其工作:

    1. 在 index.php 文件中,删除了引用“upload_image.php”的斜杠“/”。 已将 imageUploadURL: '/upload_image.php', 更改为 imageUploadURL: 'upload_image.php', 很难相信 Froala 网站示例中有此错误,并且尚未更正...?

    2. 第二个问题是“finfo”功能不起作用。我通过删除分号在 php.ini 中启用了它,现在一切正常!

    编辑:Froala 评论说,如果文件位于根目录中,“/”将起作用。我的不是。

    【讨论】:

      猜你喜欢
      • 2023-02-11
      • 2014-10-25
      • 2014-07-22
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 2012-01-13
      相关资源
      最近更新 更多