如何在codeigniter 4中显示上传的图像

Posted

技术标签:

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

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

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

    <pre>
        <img src="<?=WRITEPATH.$list->avatars?>" class="img-radius" >
        <img src="<?=base_url()?>/writable/<?=$list->avatars?>" class="img- 
    radius" >
    </pre>

请解释如何显示图像

【问题讨论】:

【参考方案1】:

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

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

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

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

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

    或者...一种或另一种方式,只需将您的文件拖放/上传到您想要的 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)。

【讨论】:

以上是关于如何在codeigniter 4中显示上传的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 [codeigniter] 中上传具有随机名称规则的图像

如何在codeigniter中上传2个单独的图像

使用ajax在codeigniter中上传图片

如何在codeigniter中使用ajax上传图片?

如何将图像路径和名称上传到数据库 - Codeigniter

如何使用 Codeigniter 删除上传的文件?