ZF2 - 基于完整路径在视图中显示图像

ZF2 - Display image in view based on full path

我已经成功地在 ZF2 中上传图像文件并将完整路径存储在数据库中。 路径如下所示:

/home/ubuntu/NetBeansProjects/project/data/upload/event_5554a7b600c0f.jpg

项目结构是一个 Zend Skeleton 应用程序:

项目 数据 上传 event_5554a7b600c0f.jpg 模块 public

在我看来我调用:

     <img src="<?php echo $event->getImage(); ?>" class="img-thumbnail" alt="<?php echo $event->getTitle(); ?>" width="304" height="236"> </td>

$event->getImage() return 如前所述的完整文件位置。

如果我将相同的图像存储在 项目 public 图片 上传 event_5554a7b600c0f.jpg

并将 /img/upload/event_5554a7b600c0f.jpg 存储为有效路径。

我有两个问题: 1. 将上传的图像文件存储在 publi/img 文件夹或顶层 data/uploads 文件夹中有什么好的策略? 2. 如果将文件存储在 data/uploads 中是更好的策略,我该如何显示图像?

谢谢!

如果图像是 public 并且您很高兴网络上的任何人都可能看到它,那么将它保存在 public 文件夹中是最简单的。

如果您需要在用户名/密码或 ACL 等后面保护图像,您可能会考虑将它放在数据目录中。为了使其正常工作,您可以创建一个控制器来访问图像和流它在响应中使用类似这样的东西;

$filesize = filesize($directory.$fileName);
$response = new \Zend\Http\Response\Stream();
$response->setStream(fopen($directory.$fileName, 'r'));
$response->setStatusCode(200);
$headers = new \Zend\Http\Headers();
$headers->addHeaderLine('Content-Type', $mimeType)
    ->addHeaderLine('Content-Disposition', 'attachment; filename="' . $fileName . '"')
    ->addHeaderLine('Content-Length', $filesize);

$response->setHeaders($headers);

return $response;

我想这确实会给您的服务器增加额外的负载。

我创建了一个模块 HtImgModule 用于在 Zend Framework 2 中进行图像处理。

下面是一个简单输出图像的例子:

namespace Applicaton\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use HtImgModule\View\Model\ImageModel;

class MyController extends AbstractActionController
{
    public function displayImageAction()
    {
        return new ImageModel('path/to/image');
    }
}

因此,并不是绝对有必要将图像存储在public文件夹中。但是,有性能损失。幸运的是,HtImgModule 足够灵活,可以将图像缓存到 Web 根目录,以便缓存的图像可以直接从文件系统提供。查看 HtImgModule.

的文档