невозможно загрузить изображение на локальный сервер с помощью 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>

и это 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, потому что некоторые люди говорят, что это может быть проблемой — но я все еще не могу загрузить файл изображения. и сообщение об ошибке было очень полезно: «Что-то пошло не так. Пожалуйста, попробуйте еще раз»

Я часами царапал голову над этой штукой. и в огромном мире Интернета буквально нет полного кода для решения этой проблемы, поэтому я не могу понять, что я делаю неправильно. Кто-нибудь может мне с этим помочь?

1

Решение

Согласно их документации, вы должны использовать этот код

<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));
}
?>
2

Другие решения

Это, вероятно, отсутствует 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);
}
0

<?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);
}
?>
0
По вопросам рекламы [email protected]