Я работаю над сайтом с использованием 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>
и это froala_upload
функция в моем Test
файл контроллера:
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));
}
Я намеренно пропустил проверку изображения с finfo
который используется в большинстве документов о Froala Image Upload, потому что некоторые люди говорят, что это может быть проблемой — но я все еще не могу загрузить файл изображения. и сообщение об ошибке было очень полезно: «Что-то пошло не так. Пожалуйста, попробуйте еще раз»
Я часами царапал голову над этой штукой. и в огромном мире Интернета буквально нет полного кода для решения этой проблемы, поэтому я не могу понять, что я делаю неправильно. Кто-нибудь может мне с этим помочь?
Согласно их документации, вы должны использовать этот код
<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);
}
?>