2011-01-05 8 views
0

どうすればよいですか?私はfile_put_contents()を使用しようとしましたが、破損したファイルが作成されました。zendフレームワークのmssql dbからblob(type:image)をダウンロードする

これで、正しいヘッダーを含むビューを設定しようとしています。

<?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の致命的なエラー:メンバ関数setHttpResponseCodeに呼び出し()非オブジェクト上で... \アプリケーション\モジュール\ ordreの\コントローラ\ OrdreController.phpがライン上で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()、コードが "作品"。私は正しい名前とほぼ正しいサイズのファイルを取得します。

+0

私はおそらくのような何かをしたいですか? –

+1

なぜbase64でエンコードされたデータを送信していますか?それは本当にbase64でエンコードされていますか? –

+0

私が最後に試したことではありません。私はそれがあったはずだったのと同じサイズについて破損したファイルを取得します。 –

答えて

0

私の意見では、ビューは決してヘッダーを出力すべきではありません。私には、コントローラのような感じがします。また、コントローラでは、ヘッダーを設定するメソッドを持つレスポンスオブジェクトにアクセスできます。

また、$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); 
} 
+0

非常に迅速な返信をありがとう! これは私に内部サーバエラーを与えただけです:( これは、私が作業しているDBに対応するようにフィールドが更新されたコードです(fileerver上のファイルを保存するだけでなく...): –

+0

http://pastebin.com/7SJBXn6p –

+0

エラーログメッセージも貼り付けることができますか? – PatrikAkerstrand

関連する問題