无法通过ajax调用返回laravel下载

时间:2017-10-31 23:26:14

标签: ajax laravel routes

我希望用户下载一个文件并不需要通过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控制器,是否可能?

谢谢!

2 个答案:

答案 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;]);

它有效。感谢您的回答和努力!