我正在使用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);
}
?>