【问题标题】:Dowload word document with costum name using laravel8 , ajax and PhpWord Library使用 laravel 8、ajax 和 PhpWord 库下载自定义名称的 word 文档
【发布时间】:2021-11-20 09:33:00
【问题描述】:

我正在尝试使用 Laravel8 和 Ajax 调用从存储路径下载 word 文档。

所以我使用以下代码:

<script>
  $(document).on('click', '.download', function(){

        
         var data = '';
          var id = $(this).attr('id');
         console.log(id);
          var data='';
          

          
          
          $.ajax({
          
             url:"modeles_contrat/"+id+"/download",
          
           type:"GET",
            data: data, 

            xhrFields: { 

                responseType: 'blob' 

            }, 

            success: function(response){ 



                var blob = new Blob([response]); 

                var link = document.createElement('a'); 

                link.href = window.URL.createObjectURL(blob); 

                link.download = "casting.docx"; 

                link.click(); 
            }, 

             error: function() {

              $('#responseMsg').removeClass("alert-success");
               $('#responseMsg').addClass("alert-danger");
               $('#responseMsg').html('Veuillez générer le contrat');
               $('#responseMsg').show();
      }
            })
           });

</script>

还有以下控制器:

public function download($id,$downloadName = null){


           $data2 = array();
              
              $data_modele = Model_Contrat::where('id_modele_contrat',$id)->first();

                $filename= $data_modele->fichier;

                 
                 $filepath = 'Casting_V0.1_Test\casting\storage\app\public\uploads\modeles_contrat/'.$filename;
               /*  $filepath = str_replace('', '/',public_path('Model/'.$filename.'.docx'));
*/
                 if (file_exists($filepath)) {

                     $headers = array(
                  'Content-Type: application/docx',
            );
                 $downloadName = $downloadName??$filename;
                 return Response::download($filepath);

                    } else {
                          $data2['success'] = 2;
                       $data2['message'] = 'File not uploaded.'; 
                       
                          return response()->json($data2);

                }

}

所有工作文件,但问题是所有文件都以名称casting.docx 下载。我想下载每个文件的原始名称,而不是名称casting.docx

如果您对如何下载带有自定义名称的文件有任何想法,请帮帮我。

提前谢谢你

编辑

我试图删除 ajax 调用,所以我使用以下代码:

我的数据表我添加了一个列链接来获取行的id:

$button .='<a href="/modeles_contrat/"'.$data->id_modele_contrat.'"/download" class="btn btn-xs btn-info pull-right" data_id="'.$data->id_modele_contrat.'" >Télécharger</a>';

在我的路线中,我有以下路线:

Route::group(['middleware' => ['auth','role:account_manager|admin|manager_de_filiale']], function() { 
    Route::get('/modeles_contrat/{id_modele_contrat}/download', [App\Http\Controllers\ModeleController::class, 'download']);
});

在我的控制器中,我有以下代码:

public function download($id_modele_contrat){


           $data2 = array();
              
              $data_modele = Model_Contrat::where('id_modele_contrat',$id_modele_contrat)->first();

                $filename= $data_modele->fichier;

                 
                 $filepath = 'Casting_V0.1_Test\casting\storage\app\public\uploads\modeles_contrat/'.$filename;
               /*  $filepath = str_replace('', '/',public_path('Model/'.$filename.'.docx'));
*/
                 if (file_exists($filepath)) {


                     $headers = array(
          'Content-Type: => application/docx',
        );
    return  Response::download($filepath,$filename, $headers);

                 
}

}

所以现在当我点击下载文件的链接时,我得到以下页面并且文件没有下载:

【问题讨论】:

    标签: ajax laravel phpword


    【解决方案1】:

    您可以将文件名作为第二个参数传递给Response::download() 函数。
    试试:

    return Response::download($filepath, $downloadName);
    

    Here是下载功能的文档(Storage::downloadResponse::download应该是一样的)。

    【讨论】:

    • 感谢您的回答,但不起作用,请检查我的更新,我试图删除 ajax 调用,但总是出错
    • 您似乎打开了“/modeles_contrat”,但您的路线是“/modeles_contrat/{id_modele_contrat}/download”。所以你打开了错误的路线,对吧?
    • 是的,但我的代码中的错误在哪里?
    • 它现在可以使用我将链接更改为$button .='&lt;a href="/modeles_contrat/'.$data-&gt;id_modele_contrat.'/download" class="btn btn-xs btn-info pull-right" data_id="'.$data-&gt;id_modele_contrat.'" &gt;Télécharger&lt;/a&gt;';
    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多