我希望用户下载一个文件并不需要通过ajax,但这是我找到的最简单的方法,但它不起作用。
这是我正在调用的Controller中的方法:
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>");
});
这是我的路线,位于名为panel的组中:
Route::get('/download/', ['as' => 'files.download', 'uses' => 'Panel\ClientController@download']);
我的第一个问题是:是否可以从ajax拨打电话到laravel的下载响应?
第二个问题:我无法弄清楚如何替换arax调用路由到laravel控制器,是否可能?
谢谢!
答案 0 :(得分:1)
是的,这是可能的。这只是与Laravel有关。试试这个例子:
HTML :(只需在此处调用您的GET路线)
<a href="/download/">download file(s)</a>
下载功能
public function download()
{
// $pathToFile : set to what you need
return Response::download($pathToFile);
}
答案 1 :(得分:0)
由于目录路径参数有斜杠,我认为该路由需要其他参数。所以我决定不传递整个目录路径,而只传递ID和文件名。所以我的路线变成了这样:Route :: get(&#39; / download / {id} / {fileName}&#39;,[&#39; as&#39; =&gt;&#39; files.download& #39;,&#39;使用&#39; =&gt;&#39; Painel \ ClienteController @ fazerDownload&#39;]);
它有效。感谢您的回答和努力!