2017-12-15 1 views
0

아래 코드 스 니펫에서 $file 배열의 내용이 브라우저에 렌더링됩니다.슬림 3 프레임 워크 - 생성 된 파일을 반환하는 방법?

코드는 작동하지만 브라우저에 보낼 스트림으로 이진 문자열을 변환하는 더 좋은 방법이 있어야한다고 생각합니다.

if (is_array($file)) { 

    $filename=preg_replace('/[^A-Za-z0-9 \\._-]+/', '', $file['filename']); 

    // -- This feels like a hack 
    $stream = fopen('php://memory', 'r+'); 
    fwrite($stream, $file['content']); 
    rewind($stream); 
    // -- 

    return $response->withHeader('Content-Type', $file['mimetype']) 
     ->withHeader('Content-Transfer-Encoding', 'binary') 
     ->withHeader('Content-Disposition', 'inline; filename="' . basename($filename) . '"') 
     ->withHeader('Expires', '0') 
     ->withHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') 
     ->withHeader('Pragma', 'public') 
     ->withBody(new \Slim\Http\Stream($stream)); 
} 

스트림으로 컨텐츠를 변환하는 적절한 방법은 무엇입니까?

답변

0

Response 개체의 getBody() 메서드를 사용하여 문제가 해결되었습니다.

if (is_array($file)) { 

    if (strlen($file['filename'])) { 
     $filename=preg_replace('/[^A-Za-z0-9 \\._-]+/', '', $file['filename']); 
    } 

    $content = $response->getBody(); 
    $content->write($file['content']); 

    return $response->withHeader('Content-Type', $file['mimetype']) 
     ->withHeader('Content-Transfer-Encoding', 'binary') 
     ->withHeader('Content-Disposition', 'inline; filename="' . basename($filename) . '"') 
     ->withHeader('Expires', '0') 
     ->withHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') 
     ->withHeader('Pragma', 'public'); 

} 
관련 문제