我已设法在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-&gt; getImage()返回前面所述的完整文件位置。
如果我存储相同的图像 项目 上市 IMG 上载 event_5554a7b600c0f.jpg
并将/img/upload/event_5554a7b600c0f.jpg存储为路径。
我有两个问题: 1.将上传的图像文件存储在publi / img文件夹或顶级数据/上传文件夹中有什么好的策略? 2.如果将数据存储在数据/上传中是一个更好的策略,我该如何显示图像?
谢谢!
答案 0 :(得分:3)
我已经在Zend Framework 2中创建了一个用于进行图像处理的模块HtImgModule。
这是一个简单输出图像的例子:
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的文档。
答案 1 :(得分:0)
如果图片是公开的,并且您很高兴网络上的任何人都可以看到它,那么将其保存在公共文件夹中是最容易的。
当您考虑将其放在数据目录中时,如果您需要保护用户名/密码或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;
我想这会给你的服务器增加额外的负担。