Php 显示水滴图像-symfony
我的数据库中有blob数据,它们是我想作为基本图库显示的图像 我编写了一个方法来显示图像,但是我得到了一个错误,它是一个字符串,而不是返回的blob数据:Php 显示水滴图像-symfony,php,symfony1,Php,Symfony1,我的数据库中有blob数据,它们是我想作为基本图库显示的图像 我编写了一个方法来显示图像,但是我得到了一个错误,它是一个字符串,而不是返回的blob数据: public function getFilenamePath() { $file_src = false; if (null !== $fp = $this->getFilename()) { $file = stream_get_contents($fp); $file_src = '
public function getFilenamePath()
{
$file_src = false;
if (null !== $fp = $this->getFilename())
{
$file = stream_get_contents($fp);
$file_src = '/uploads/gallery/'.$this->getId().'.jpg';
}
return $file_src;
}
其中getFilename()
是我的blob列
行动:
public function executeSingle(sfWebRequest $request)
{
$application_id = $this->getRequestParameter('id');
$c = new Criteria();
$c->addJoin(GalleryPeer::APPLICATION_ID, ApplicationPeer::ID);
$c->addJoin(GalleryImagePeer::GALLERY_ID, GalleryPeer::ID);
$c->add(GalleryPeer::APPLICATION_ID, $application_id);
$this->galleries = GalleryImagePeer::doSelect ( $c );
}
模板:
foreach($galleries as $gallery)
{
$path = $gallery->getFilenamePath();
if($path)
{
echo '<img src="'.$path.'" />';
}
}
foreach($gallery作为$gallery)
{
$path=$gallery->getFilenamePath();
如果($path)
{
回声';
}
}
我得到的错误是,stream\u get\u contents
似乎在返回字符串
无论如何,我是否可以获取blob数据,或者不使用模型方法,而是使用操作返回附加到应用程序的所有图像
谢谢如果您将图像存储在数据库中,您(基本上)有两个选项可以在客户端上显示它们: 第一种解决方案:获取文件内容并使用base64编码对其进行编码。您可以在此处找到一个工作示例: 这种方法不是最好的,因为如果您这样做,客户端将无法缓存这些图像,这意味着更多的流量、更多的处理时间、更多的数据库连接、较慢的页面加载等 第二种解决方案:在Symfony中创建图像加载操作。路由如下所示:
mapimage:
url: /myimage/:image_id.png
param: { module: myimagemodul, action: myimageaction }
您必须创建一个控制器操作myimageaction,在那里您可以获得如下所示的图像ID
$request->getParameter('image_id')
并从数据库中获取blob数据,并将其作为具有特定http头的二进制文件返回。您可以通过简单的谷歌搜索找到工作示例,例如:
$this->image = ImagePeer::retrieveByPk ($request->getParameter('image_id'));
$response = $this->getResponse();
$response->clearHttpHeaders();
$response->setContentType ($this->image->getMimeType());
$response->setHttpHeader ('Content-Disposition', 'inline;filename='.$filename);
$content = $this->image->getData();
$response->setContent (stream_get_contents ($content));
$this->setLayout (false);
return sfView::NONE;
因此,在模板中,您可以执行以下操作:
<img src='<?= url_for ('route_to_action_above', array ('image_id' => $image->getId()) ?>'/>
$image->getId())?>'/>
我在家里找到了这个
如果将图像存储在数据库中,则(基本上)有两个选项可在客户端上显示它们: 第一种解决方案:获取文件内容并使用base64编码对其进行编码。您可以在此处找到一个工作示例: 这种方法不是最好的,因为如果您这样做,客户端将无法缓存这些图像,这意味着更多的流量、更多的处理时间、更多的数据库连接、较慢的页面加载等 第二种解决方案:在Symfony中创建图像加载操作。路由如下所示:
mapimage:
url: /myimage/:image_id.png
param: { module: myimagemodul, action: myimageaction }
您必须创建一个控制器操作myimageaction,在那里您可以获得如下所示的图像ID
$request->getParameter('image_id')
并从数据库中获取blob数据,并将其作为具有特定http头的二进制文件返回。您可以通过简单的谷歌搜索找到工作示例,例如:
$this->image = ImagePeer::retrieveByPk ($request->getParameter('image_id'));
$response = $this->getResponse();
$response->clearHttpHeaders();
$response->setContentType ($this->image->getMimeType());
$response->setHttpHeader ('Content-Disposition', 'inline;filename='.$filename);
$content = $this->image->getData();
$response->setContent (stream_get_contents ($content));
$this->setLayout (false);
return sfView::NONE;
因此,在模板中,您可以执行以下操作:
<img src='<?= url_for ('route_to_action_above', array ('image_id' => $image->getId()) ?>'/>
$image->getId())?>'/>
我在家里找到了这个
这个代码没有任何意义 为什么要将二进制(读取字符串)数据从
->getFilename()
馈送到仅对资源
数据类型操作的流式获取内容()
?它当然会抱怨
将blob输出到浏览器非常简单:
$this->getResponse->setContentType('image/jpeg');
echo $data->getFilename(); // assuming filename column is your blob column
这个代码没有任何意义 为什么要将二进制(读取字符串)数据从
->getFilename()
馈送到仅对资源
数据类型操作的流式获取内容()
?它当然会抱怨
将blob输出到浏览器非常简单:
$this->getResponse->setContentType('image/jpeg');
echo $data->getFilename(); // assuming filename column is your blob column
请尝试将getFilenamePath函数切换到此
public function getFilenamePath() {
$file_src = '/uploads/gallery/'.$this->getId().'.jpg';
if (file_exists($file_src ) {
return $file_src;
} else {
return false;
}
}
请尝试将getFilenamePath函数切换到此
public function getFilenamePath() {
$file_src = '/uploads/gallery/'.$this->getId().'.jpg';
if (file_exists($file_src ) {
return $file_src;
} else {
return false;
}
}
$profile\u picture=base64\u编码(stream\u get\u contents($image->getContent());
回声';
$profile\u picture=base64\u encode(stream\u get\u contents($image->getContent());
回声';
如果在本地以及/uploads/gallery
下都有图像,为什么要将图像作为blob数据存储在数据库中?您在哪里使用了示例中的$file
。。。搞什么鬼?为什么要将任何内容流式传输到$file中?似乎我使用的代码>使用的是$file中的stream\u get\u内容。所以我想我不小心把它忘在了里面。我使用了$file\u src路径/uploads/gallery,所以在html源代码中我有一个指向图像的路径。我不确定我是否可以用其他方法来完成。如果您在本地也在/uploads/gallery
下保存图像,为什么要将图像作为blob数据存储在数据库中?您在哪里使用了示例中的$file
。。。搞什么鬼?为什么要将任何内容流式传输到$file中?似乎我使用的代码>使用的是$file中的stream\u get\u内容。所以我想我不小心把它忘在了里面。我使用了$file\u src路径/uploads/gallery,所以在html源代码中我有一个指向图像的路径。我不确定我是否可以用其他方法,但这是针对多个图像的。我有一个名为application(id)、gallery(id、application\u id)和image\u gallery(id、gallery\u id)的表。因此,我需要图库中与应用程序关联的所有图像,因此需要我的图库。当然,上面的代码只会显示一个图像?无论何时,只要你想显示一个图库,你就可以从数据库中获取所有图像,并在模板中生成一个HTML,对于所有标记源URL,你都可以使用上面描述的控制器。我正在用模板代码更新答案。但是您在上面提供的代码默认情况下将显示图像。我想要一个html模板,一个图像列表。但这是多个图像。我有一个名为application(id)、gallery(id、application\u id)和image\u gallery(id、gallery\u id)的表。因此,我需要图库中与应用程序关联的所有图像,因此需要我的图库。当然,上面的代码只会显示一个图像?无论何时,只要你想显示一个图库,你就可以从数据库中获取所有图像,并在模板中生成一个HTML,对于所有标记源URL,你都可以使用上面描述的控制器。我正在用模板代码更新答案。但是您在上面提供的代码默认情况下将显示图像。我想要一个html模板,一个图像列表