3

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

请解释如何显示图像

4

5 回答 5

4

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

$fileName = $file->getRandomName();
$ext = $file->getClientExtension();
$file->move(ROOTPATH.'public/assets/uploads/', $fileName);
log_message("info", $fileName . " saved to public upload folder");
于 2020-04-08T14:33:38.170 回答
4

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

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

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

其余的,您将不得不处理文档中有关已上传文件的信息

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

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

希望它有所帮助,它只是划伤表面。

于 2019-11-06T12:15:43.677 回答
2

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

ln -s [project_directory]/writable/uploads uploads

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

于 2020-09-11T15:35:22.530 回答
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)。

于 2020-11-05T11:49:15.697 回答
0

我知道这已经晚了,但它就像一个魅力。此代码基于以下问题:有没有办法让 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

于 2022-03-01T17:37:43.753 回答