как отображать загруженные изображения в 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

В остальном вам понадобится информация из документов о загруженных файлах.

  1. Когда вы загружаете изображение через <input type="file" name="avatar" />он возвращает массив с информацией о файлах, с которой нужно что-то делать. Вы можете попробовать переместить его в папку public / uploads с помощью$file->move(WRITEPATH.'public/uploads'); часть, и посмотрим, как получится.

  2. Или... так или иначе, просто перетащите / загрузите свои файлы в нужную папку 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

Другие вопросы по тегам