无法使用froala将图像上传到本地服务器


unable to upload image to local server with froala

我正在使用codeigniter开发一个网站,并尝试使用Froala Editor在文本区域上传图像。在我尝试将图像文件上传到本地文件夹而不是默认文件夹之前,一切都很好http://i.froala.com/upload

这是我的html文件:

<textarea id="my_editor" name="my_editor" class="editor">
</textarea>
<script>
  $(function() {
    $('.editor').froalaEditor({
      imageUploadURL: "test/froala_upload",
    })
  });
</script>

这是我的Test控制器文件中的froala_upload函数:

function froala_upload() {
    // Allowed extentions.
    $allowedExts = array("gif", "jpeg", "jpg", "png", "blob");
    // Get filename.
    $temp = explode(".", $_FILES["file"]["name"]);
    // Get extension.
    $extension = end($temp);
    // Generate new random name.
    $name = sha1(microtime()) . "." . $extension;
    // Save file in the uploads folder.
    move_uploaded_file($_FILES["file"]["tmp_name"], getcwd(). "/assets/review/" . $name);
    // Generate response.
    $response = new StdClass;
    $response->link = "/assets/review/" . $name;
    echo stripslashes(json_encode($response));
}

我故意省略了大多数关于Froala image Upload的文档中使用的finfo的图像检查,因为有些人说这可能是问题所在,但我仍然无法上传图像文件。错误信息非常有用:"出现问题。请再试一次"

我花了好几个小时为这件事挠头。在广阔的互联网世界里,这个问题实际上没有完整的代码解决方案,所以我找不到我做错了什么。有人能帮我吗?

根据他们的文档,您应该使用以下代码

<script>
  $(function() {
    $('.selector').froalaEditor({
      // Set the image upload URL.
      imageUploadURL: '/your_upload_image_script.php',
      imageUploadParams: {
        id: 'my_editor'
      }
    })
  });
</script>

接下来,您必须创建一个名为your_upload_image_script.php的文件,该文件应该类似于

<?php
    // Allowed extentions.
    $allowedExts = array("gif", "jpeg", "jpg", "png", "blob");
    // Get filename.
    $temp = explode(".", $_FILES["file"]["name"]);
    // Get extension.
    $extension = end($temp);
    // An image check is being done in the editor but it is best to
    // check that again on the server side.
    // Do not use $_FILES["file"]["type"] as it can be easily forged.
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $_FILES["file"]["tmp_name"]);
    if ((($mime == "image/gif")
    || ($mime == "image/jpeg")
    || ($mime == "image/pjpeg")
    || ($mime == "image/x-png")
    || ($mime == "image/png"))
    && in_array(strtolower($extension), $allowedExts)) {
        // Generate new random name.
        $name = sha1(microtime()) . "." . $extension;
        // Save file in the uploads folder.
        move_uploaded_file($_FILES["file"]["tmp_name"], getcwd() . "/uploads/" . $name);
        // Generate response.
        $response = new StdClass;
        $response->link = "/uploads/" . $name;
        echo stripslashes(json_encode($response));
    }
?>

它可能缺少extension值。

尝试以下

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES["file"]["tmp_name"]);
$extension = end($temp);
if ($extension == "") {
    list($dummy, $extenstion) = explode("/", $mime);
}
<?php
try {
  // File_Route.
  $fileRoute = "/Name_folder/Name";
  $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);
}
?>