2011-01-05 4 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에 호출() 비 개체에서 ... \ 프로그램 \ 모듈 \ 질서 \ 컨트롤러 \ 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

관련 문제