【问题标题】:ZF2 - Display image in view based on full pathZF2 - 基于完整路径在视图中显示图像
【发布时间】:2015-07-26 06:10:45
【问题描述】:

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

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

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

项目 数据 上传 event_5554a7b600c0f.jpg 模块 公开的

在我看来,我称之为:

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

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

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

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

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

谢谢!

【问题讨论】:

  • 如果您想通过 html 显示此图像,您应该将这些东西保存在公共文件夹中,否则它将无法工作。

标签: php image zend-framework zend-framework2


【解决方案1】:

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

如果您需要保护用户名/密码或 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;

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

【讨论】:

    【解决方案2】:

    我创建了一个模块 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');
        }
    }
    

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

    【讨论】:

    • 非常感谢 Ujjwal Ojha。
    • @Antenne 如果这有帮助,支持和/或接受答案可能会激励我回答更多问题;)
    • 我还不能投票,但我接受了你的回答。非常感谢。
    • @Antenne 你没有接受我的回答。您接受了 Finbarr 的回答。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2023-03-25
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多