2017-01-18 22 views
0

codeigniterにforce_downloadを使用してファイルをダウンロードしようとしています。 Codeigniterの強制ダウンロードが機能しません

私はこの

$.ajax({ 
    type: 'POST' 
    , url: '<?php echo base_url('downloadPayroll'); ?>' 
    , data: { filename: filename } 
}); 

などのAJAX呼び出しを作成して、私は正しいパスとファイル名を知っているここで私のコントローラ

public function downloadPayroll() { 
    $filename = $this->input->post('filename'); 
    $fileContents = file_get_contents(base_url('assets/uploads/'. $filename)); 

    force_download($filePath, $fileContents); 
} 

はあるが、それは何かをダウンロードしません。

Download Helperのドキュメントが非常に限られているため、私は間違っています。

+0

ファイル名前は拡張子でなければなりません。 –

+0

すべての警告と出力名を有効にし、このファイルが存在し、空でないことを確認してください。お使いのOSでファイルアクセスを監視するには、いくつかのユーティリティを使用します。 –

+0

これは私の問題を解決しましたhttp://stackoverflow.com/questions/30261836/codeigniters-force-download-problems –

答えて

0

以下のコードを試してください。あなたはこの問題を持つことも誰にもforce_download

$filename = $this->input->post('filename'); 
$fileContents = file_get_contents(base_url('assets/uploads/'. $filename)); 
$file='test.pdf'; 
force_download($file, $fileContents); 
+0

すでにこれを行いましたが、まだサーバーからの応答はありません。 –

+0

最初の引数force_downloadのファイル形式を指定してください。 –

0

の間違った変数名だけのメモを渡している:あなたはforce_download()に最初の引数に供給し、ファイル名のファイル拡張子を持っていることを確認してください。

CodeIgniterはこれを使用してMIMEタイプを設定しますが、これは機能していないようです。

さらにCodeIgniter - force_download() problem

$name = 'myfile.txt';//file extension is required 
force_download($name, NULL);//if you dont want to send data set NULL 

そして、downloadヘルパーを先にロードすることを忘れないでください。

$this->load->helper('download'); 
+0

私は私のオートロードにダウンロードヘルパーを含めました。また、私はすでに 'force_download'関数に自分のファイル名をハードコーディングしようとしましたが、まだサーバから何の応答も得られませんでした。 –

+0

サーバ上で 'file_get_contents'を有効にします。 –

+0

詳細はこちらhttp://stackoverflow.com/questions/10256060/enabling-file-get-contents-on-a-shared-server –

0

ようなAJAXリクエストを経由してファイルをダウンロードする方法はありません - あなたのJSファイル

代わりにこれを試して

$.ajax({ 
    type: 'POST' 
    , url: '<?php echo base_url('downloadPayroll'); ?>' 
    , data: { filename: filename }, 

    success: function(strUrl) 
    { 
     var link = document.createElement('a'); 
     link.style = "display: none"; 
     link.href = strUrl; 
     document.body.appendChild(link); 
     link.click(); 
     setTimeout(function() { 
      document.body.removeChild(link); 
     }, 5000); 
    } 
}); 

あなたのコントローラー:

public function downloadPayroll() 
{ 
    $filename = $this->input->post('filename'); 
    echo base_url('assets/uploads/'. $filename); 
} 
関連する問題