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

时间:2019-11-06 11:03:14

标签: codeigniter-4

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

i在ci 4项目中以可写/上传/头像形式上传了图像 当检查检查元素时,我复制链接并将其粘贴到浏览器中,图像显示出来。

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

请说明如何显示图像

4 个答案:

答案 0 :(得分:3)

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

cy.server()
cy.route({
      method: 'POST',
      url: 'https://......../ABC',
    }).as('abc')
cy.visit('https://......../ABC') 
cy.wait('@abc').then((xhr) => {
      assert.isNotNull(xhr.response.body.data, 'call to server has data')
    })   
cy.get('@abc').should('have.property', 'status', 200)

答案 1 :(得分:2)

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

ln -s [project_directory]/writable/uploads uploads

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

答案 2 :(得分:0)

基本上,如果您只想引用图像,则应将它们存储在public /文件夹中的public / ups等内容中,然后:

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

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

对于其余的内容,您将需要使用文档中有关Uploaded files的信息

  1. 当您通过<input type="file" name="avatar" />上传图片时,它将返回一个数组,其中包含要处理的文件信息。您可以尝试使用$file->move(WRITEPATH.'public/uploads');部分将其移至public / uploads文件夹,并查看其运行情况。

  2. 或者...一种或另一种方法,只需将文件拖放/上传到所需的public / assets文件夹中,然后在标记中引用它们即可。

希望它会有所帮助,它只会刮擦表面。

答案 3 :(得分:0)

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

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