2015-05-14 73 views
2

我設法上傳ZF2中的圖像文件並在數據庫中存儲完整路徑。 路徑是這樣的:ZF2 - 基於完整路徑在視圖中顯示圖像

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

項目結構是一個Zend框架應用程序:

項目 數據 上傳 event_5554a7b600c0f。 JPG 模塊 公共

在我看來,我呼籲:

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

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

如果我同一個圖像存儲在 項目 公共 IMG 上傳 event_5554a7b600c0f.jpg

和存儲/img/upload/event_5554a7b600c0f.jpg的路徑它的工作原理。

我有兩個問題: 1.將上傳的圖像文件存儲在publi/img文件夾或頂級數據/上傳文件夾中的策略是什麼? 2.如果更好的策略是將文件存儲在數據/上傳文件中,如何顯示圖像?

謝謝!

+1

如果你想顯示這個圖像的HTML你應該保持在公用文件夾中,否則它不會工作。 – jewelhuq

回答

3

我已經創建了一個模塊HtImgModule在Zend公司做圖像處理框架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的文檔。

+0

非常感謝Ujjwal Ojha。 – Antenne

+0

@Antenne如果這有幫助,upvoting和/或接受的答案可能會激勵我回答更多的問題;) –

+0

我還不能upvote,但我接受了你的答案。非常感謝。 – Antenne

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; 

這個我想象不會增加額外的負載到您的服務器。

相關問題