2017-10-31 2 views
0

私はユーザーにファイルをダウンロードしてもらいたいのですが、実際にはajaxを経由する必要はありませんが、見つけられた最も簡単な方法でした。ajaxコールでlaravelのダウンロードを返すことはできません

public function download(Request $request) 
    { 
     $dir = $request->get("directory"); 
     return response()->download($dir); 
    } 

をここに私のAjaxの機能である:

function download(diretorio) { 

    $.ajax({ 
     url: "/panel/download", 
     data: {_token: jQuery(".token").val(), diretorio: diretorio}, 
     success: function(e) { 

     } 
    }).done(function(e) { 

    }); 
} 

この関数はアペンドの内側に呼び出されている:

$('#uploads tbody').append("<tr><td>" + fileName + "</td> <td><a class='btn btn-success' href='' onclick=\"download('" + item + "')\">Download</button></td></tr>"); 
    }); 
ここ

は私が呼んでいるコントローラからの私の方法があります

私のルートは、パネルと呼ばれるグループ内にあります:

Route::get('/download/', ['as' => 'files.download', 'uses' => 'Panel\[email protected]']); 

私の最初の質問です:この呼び出しをajaxからlaravelのダウンロード応答にすることは可能ですか?

2番目の質問:ララベルコントローラへの経路をajaxコールで置き換える方法がわかりません。

ありがとうございました!

答えて

1

はい、可能です。しかしこれはLaravelとだけです。この例を試してみてください。

HTML:(ちょうどここにあなたのGETルート呼び出す)

<a href="/download/">download file(s)</a> 

ダウンロード機能

public function download() 
{ 
     // $pathToFile : set to what you need 
     return Response::download($pathToFile); 
} 
+0

jQueryのajax関数はまったく必要ありません。 – Jeffrey

+0

ありがとうございます、しかし、私はパラメータとしてディレクトリを渡す必要があります、これはなぜ私はajaxを使用しています。 私はあなたのようなリンクにこのURLを渡そうとしています。/download/public/painel/clients/4/filename.pdf 私のルートには次のようなものがあります:Route :: ( 'ファイル'ダウンロード '、'使用 '=>'パネル\ ClientController @ダウンロード ']); しかし、例外が見つからないページがあります。 –

+0

@GabrielAugustoあなたは正しいルートを呼んでいると確信していますか?もしそうなら、あなたは既存のファイルに誘導していますか? –

0

によるディレクトリのパスパラメータはスラッシュを持っているという事実のために、私はルートを考えます他のパラメータが必要です。だから私はディレクトリパス全体を渡さず、IDとファイル名だけを渡すことにしました。私のルートは次のようになりました:Route :: get( '/ download/{id}/{fileName}'、['as' => 'files.download'、 'uses' => 'Painel \ ClienteController @ fazerDownload'] );

それは働いた。答えと努力をありがとう!

関連する問題