【问题标题】:how to display uploaded images in codeigniter 4如何在codeigniter 4中显示上传的图像
【发布时间】:2020-03-02 20:21:53
【问题描述】:

在 Codeigniter 4 中,如何显示上传的图片。是否需要授予任何权限?

我在 CI4 项目中的 writable/uploads/avatar 中上传了图片 当我检查检查元素并复制链接并粘贴到浏览器上时,图像显示。

    <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>

请解释如何显示图像

【问题讨论】:

    标签: codeigniter-4


    【解决方案1】:

    基本上,如果您想简单地引用图像,您应该将它们存储在您的 public/ 文件夹中,例如 public/uploads,然后只需:

    <img src="<?=base_url()?>public/uploads/Avatar.png" alt="Avatar">
    

    在 writable/ 文件夹主题和图像上,检查线程 https://forum.codeigniter.com/thread-67352.html

    对于其余部分,您将不得不处理文档中有关 Uploaded files 的信息

    1. 当您通过&lt;input type="file" name="avatar" /&gt; 上传图像时,它会返回一个包含文件信息的数组以进行处理。您可以尝试使用$file-&gt;move(WRITEPATH.'public/uploads'); 部分将其移至 public/uploads 文件夹,看看效果如何。

    2. 或者...一种或另一种方式,只需将您的文件拖放/上传到您想要的 public/assets 文件夹中并在标签中引用它们,它就可以工作了。

    希望它有所帮助,它只是触及表面。

    【讨论】:

      【解决方案2】:

      您可以将上传的文件移动到公共上传文件夹:

      $fileName = $file->getRandomName();
      $ext = $file->getClientExtension();
      $file->move(ROOTPATH.'public/assets/uploads/', $fileName);
      log_message("info", $fileName . " saved to public upload folder");
      

      【讨论】:

        【解决方案3】:

        正确的方法是在公共/上传中创建可写/上传的符号链接

        ln -s [project_directory]/writable/uploads uploads
        

        现在您可以访问文件 siteurl/uploads/ddmmyy/filename

        【讨论】:

          【解决方案4】:

          如果您将图像放在公共文件夹中,那么任何人都可以看到它。如果您想阻止任何人看到该图像,那么另一个(无法访问)文件夹中的图像是有意义的。 在视图中,您的图像应该是这样的:

          &lt;img src="/imageRender/&lt;?= $someimage ?&gt;" alt="image"&gt;

          那么你应该有一个路由来提供这个“受保护”的图像,就像这样:

          $routes-&gt;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)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-02-05
            • 2021-01-10
            • 1970-01-01
            • 1970-01-01
            • 2012-03-05
            • 2013-06-08
            • 1970-01-01
            相关资源
            最近更新 更多