在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>
请说明如何显示图像
答案 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的信息
当您通过<input type="file" name="avatar" />
上传图片时,它将返回一个数组,其中包含要处理的文件信息。您可以尝试使用$file->move(WRITEPATH.'public/uploads');
部分将其移至public / uploads文件夹,并查看其运行情况。
或者...一种或另一种方法,只需将文件拖放/上传到所需的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)。