1

mongodb グリッドに保存しているファイルをダウンロードするために、コントローラーにこの関数があります。

function download_presentation($ext,$store_filename)
{               
    $grid = $this->mongo->db->getGridFS();                      
    //query the file object
    $objects = $grid->find();
    //set content-type header, output in browser
    switch ($ext) {
        case 'pdf':
        $mimeType = 'Content-type: application/pdf';
        break;
        case 'jpg':
        $mimeType = 'Content-type: image/jpg';
        break;
        case 'png':
        $mimeType = 'Content-type: image/png';
            break;
        case 'doc':
        $mimeType = 'Content-type: application/msword';
        break;
        case 'docx':
        $mimeType = 'Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document';
        break;
        case 'xls':
        $mimeType = 'Content-type: application/vnd.ms-excel';
        break;
        case 'xlsx':
        $mimeType = 'Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
        break;
        case 'ppt':
            $mimeType = 'Content-type: application/x-mspowerpoint';
        break;
            case 'pptx': $mimeType = 'Content-type: application/vnd.openxmlformats-                           officedocument.presentationml.presentation';
        break;
        default:
        $mimeType='Content-type: application/pdf';
                            }
           while($object = $objects->getNext()) :
           if(($object->file['filename'])==$store_filename){                      
           $content=$object->getBytes();
           header("Content-Length: " . strlen($content)); 
           header($mimeType); 
           echo ($content);}            
           endwhile;                        

} .ppt ファイルをダウンロードするたびに、.ppt ではないため、PowerPoint でこのファイルを開くことができないと表示されます。pptx ファイルの場合、ダウンロード後に開くと、PowerPoint から [修復] ポップアップをクリックすると機能します。.doc/MS-Word でも同じことが起こります。何が問題なのか誰か教えてください。

4

1 に答える 1

2

まあ、1年とたくさんのPHPを読んで理解し、実装した後、私は自分の質問に答えることができました.ob_clean()メソッドを使用してエラーを修正しましたが、それは魅力的に機能しました.

        $content= $object->getBytes();
        header("Content-Length: " . strlen($content)); 
        header($mimeType); 
        ob_clean(); 
        echo($content);
于 2014-02-07T17:40:21.020 に答える