как отображать загруженные изображения в codeigniter 4
В Codeigniter 4, как отображать загруженные изображения. Нужно ли давать какое-то разрешение?
Я загружал изображения в файл с возможностью записи / загрузки / аватара в проект CI4, когда проверяю элемент проверки, копирую ссылку и вставляю в браузер показанные изображения.
<pre>
<img src="<?=WRITEPATH.$list->avatars?>" class="img-radius" alt="User-
Profile-Image">
<img src="<?=base_url()?>/writable/<?=$list->avatars?>" class="img-
radius" alt="User-Profile-Image">
</pre>
объясните, пожалуйста, как отображать изображения
6 ответов
Вы можете переместить загруженный файл в общую папку для загрузки:
$fileName = $file->getRandomName();
$ext = $file->getClientExtension();
$file->move(ROOTPATH.'public/assets/uploads/', $fileName);
log_message("info", $fileName . " saved to public upload folder");
По сути, если вы хотите просто ссылаться на изображения, вы должны хранить их в своей папке public / в чем-то вроде public / uploads, тогда просто:
<img src="<?=base_url()?>public/uploads/Avatar.png" alt="Avatar">
В теме и изображениях с возможностью записи / папки проверьте эту ветку https://forum.codeigniter.com/thread-67352.html
В остальном вам понадобится информация из документов о загруженных файлах.
Когда вы загружаете изображение через
<input type="file" name="avatar" />
он возвращает массив с информацией о файлах, с которой нужно что-то делать. Вы можете попробовать переместить его в папку public / uploads с помощью$file->move(WRITEPATH.'public/uploads');
часть, и посмотрим, как получится.Или... так или иначе, просто перетащите / загрузите свои файлы в нужную папку public / assets и укажите на них ссылку в теге, это просто сработает.
Надеюсь, это поможет, это просто царапает поверхность.
Правильный способ - сделать символическую ссылку на запись / загрузку в общедоступной / загрузке
ln -s [project_directory]/writable/uploads uploads
Теперь вы можете получить доступ к файлам siteurl/uploads/ddmmyy/filename
Если вы поместите свое изображение в общую папку, его сможет увидеть любой. если вы хотите запретить кому-либо видеть изображение, то изображение в другой (недоступной) папке имеет смысл. в представлении ваше изображение должно быть примерно таким:
<img src="/imageRender/<?= $someimage ?>" alt="image">
тогда у вас должен быть маршрут для обслуживания этих "защищенных" изображений, например:
$routes->match(['get', 'post'], 'imageRender/(:segment)', 'RenderImage::index/$1');
и, наконец, контроллер для обслуживания изображения:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class RenderImage extends Controller
{
public function index($imageName)
{
if(($image = file_get_contents(WRITEPATH.'uploads/'.$imageName)) === FALSE)
show_404();
// choose the right mime type
$mimeType = 'image/jpg';
$this->response
->setStatusCode(200)
->setContentType($mimeType)
->setBody($image)
->send();
}
}
в контроллере вы должны выполнить некоторую проверку запроса, например, если тот, кто запрашивает изображение, вошел в систему или имеет надлежащее разрешение для просмотра изображения, в противном случае вы вернетесь в пример `` общей папки '', где любой может увидеть изображение (и так, зачем столько неприятностей?:P).
если вы хотите получить изображение в папке с возможностью записи/загрузки, вам может потребоваться использовать некоторые основные php
$myimage = file_get_contents('../writable/uploads/imagename.jpg');
header('Content-Type: image/jpg');
echo $myimage;
надеюсь, это поможет
Я знаю, что поздно, но это работает как шарм. Этот код основан на следующем вопросе: есть ли способ заставить контроллер Codeigniter возвращать изображение?
<?php
namespace App\Controllers;
class Resource extends BaseController
{
public function index($filename)
{
$filepath = WRITEPATH . 'uploads/' . $filename;
$mime = mime_content_type($filepath);
header('Content-Length: ' . filesize($filepath));
header("Content-Type: $mime");
header('Content-Disposition: inline; filename="' . $filepath . '";');
readfile($filepath);
exit();
}
}
По сути, вы будете обслуживать изображение с контроллера, и вам не нужно хранить ваши изображения в общей папке.
WRITEPATH
подскажет путь к твоему
uploads
папка. Вы также можете применить некоторую проверку в контроллере при вызове ваших изображений.
Вызов вашего изображения или любого ресурса: http://localhost/resource/image.png