簡體   English   中英

在Zend Framework中從mssql數據庫下載Blob(類型:圖像)

[英]Downloading a blob (type: image) from a mssql db in zend framework

我該怎么做? 我嘗試使用file_put_contents(),但它創建了損壞的文件。

我現在正在嘗試使用正確的標題設置視圖以使其正常工作。

<?php   
    header('Content-Type: image/jpeg');
    header('Content-Transfer-Encoding: base64');
    echo $this->dokument->Dokument;

這是我的控制器的內容:

public function imageAction()
{   
    $id = $this->_getParam('id'); 

    $dokumentTabell = new Ordre_Model_Table_OrdreDokument();
    $dokument = $dokumentTabell->find($id)->current();
    $this->view->dokument = $dokument;

    // disable layout and view
    $this->view->layout()->disableLayout();
}

根據此處的第一個答案對其進行編輯后,它會顯示以下錯誤消息:PHP致命錯誤:在... \\ application \\ modules \\ ordre \\ controllers \\ OrdreController.php中的非對象上調用成員函數setHttpResponseCode() 45行

第45行是這樣的:

     ->setHttpResponseCode(200)

其余代碼:

public function imageAction()
{   
$id = $this->_getParam('id'); 

$dokumentTabell = new Ordre_Model_Table_OrdreDokument();
$dokument = $dokumentTabell->find($id)->current();
$this->view->dokument = $dokument;
$filename = $dokument->Name.".".$dokument->FileExtension;
// disable layout and view
$this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);

$this->getResponse()
     ->clearAllHeaders()
     ->clearBody()
     ->setHttpResponseCode(200)
     ->setHeader('Content-Type', 'image/jpeg')
     ->setHeader('Content-Length', strlen($dokument->Dokument))
     ->setHeader(
        'Content-Disposition',
        "attachment;filename=\"{$filename}\""
     )
     ->setHeader('Last-Modified', $dokument->SistEndret)
     ->setBody($dokument->Dokument);
}

如果刪除第44行:-> clearBody(),則代碼“有效”。 我得到一個名稱正確且大小正確的文件。

在我看來,視圖永遠不應輸出標頭。對我來說,這感覺更像是控制器要做的事情。 另外,在控制器中,您可以訪問響應對象,該對象具有用於設置標題的方法。

另外, $dokument->Dokument base64編碼的嗎? 否則,只需跳過該標頭即可。

我可能會做類似的事情:

public function imageAction()
{   
    $id = $this->_getParam('id'); 

    $dokumentTabell = new Ordre_Model_Table_OrdreDokument();
    $dokument = $dokumentTabell->find($id)->current();
    $this->view->dokument = $dokument;

    // disable layout and view
    $this->_helper->Layout()->disableLayout();
    $this->_helper->ViewRenderer->setNeverRender();

    $this->getResponse()
         ->clearAllHeaders()
         ->clearBody()
         ->setHttpResponseCode(200)
         ->setHeader('Content-Type', 'image/jpeg')
         ->setHeader('Content-Length', strlen($dokument->Dokument))
         ->setHeader(
            'Content-Disposition',
            "attachment;filename=\"{$dokument->filename}\""
         )
         ->setHeader('Last-Modified', $dokument->lastModified)
         ->setBody($dokument->Dokument);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM