2016-02-25 85 views
0

view.blade.php這樣

.... 
<meta name="_token" content="{!! csrf_token() !!}" /> 
.... 
<script> 
jQuery(document).ready(function ($) { 
    $.ajaxSetup({ 
     headers: {'X-CSRF-Token': $('meta[name="_token"]').attr('content')} 
    }); 
    $.post('/download_file', {file_name: "abc"}, function (data) { 
     console.log(data); 
    }); 
}); 
</script> 

routes.php文件我已經設置的路線

Route::post('/download_file' , '[email protected]_file'); 

DownloadController.php我寫的代碼創建和下載文件中像這樣

<?php 
namespace App\Http\Controllers; 

use Response; 
use File; 
use Illuminate\Http\Request; 

class DownloadController extends Controller { 

    public function load_file(Request $request){ 
     if($request->file_name === "abc"){ 
      File::put("files/abc.txt", "This is content in txt file"); 
      $file_abc = public_path() . "/files/abc.txt"; 
      return Response::download($file_abc); 
     } 
    } 

} 

文件的abc.txt是創建服務器,但之後$。員額調用瀏覽器不下載它。在console.log(數據)我看到文件的內容。感謝任何幫助。

回答

0

Laravel提供響應式下載開箱。官方文檔陳述:

下載方法可能用於生成一個響應,強制用戶的瀏覽器在給定的路徑下載文件。下載方法接受一個文件名作爲方法的第二個參數,這將決定用戶下載文件時看到的文件名。最後,您可以通過HTTP頭的數組作爲第三個參數的方法:

return response()->download($pathToFile); 

//OR 

return response()->download($pathToFile, $name, $headers); 

所以你LOAD_FILE函數應該響應要下載的文件這樣的,沒有必要添加的jQuery這一點。

+0

我使用jQuery,因爲我想用戶開放view.blade.php後自動創建和下載文件。我改變這樣的代碼:$ headers = array('Content-Type:text/plain');返回響應() - >下載($ file_abc,「abc.txt」,$ headers);'但它不起作用。 –

+0

使文件下載只需HREF用戶指向LOAD_FILE功能的路線和您的下載應該開始 – rohitarora