ajax - 使用 laravel8、ajax 和 PhpWord 库下载带有服装名称的 word 文档
问题描述
我正在尝试使用 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
。
如果您对如何下载具有 custum 名称的文件有任何想法,请帮助我。
提前谢谢你
编辑
我试图删除 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']);
});
Anf 在我的控制器中,我有以下代码:
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);
}
}
所以现在当我点击下载文件的链接时,我得到以下页面并且文件没有下载:
解决方案
您可以将文件名作为第二个参数传递给Response::download()
函数。
尝试:
return Response::download($filepath, $downloadName);
这是下载功能的文档(Storage::download
并且Response::download
应该相同)。
推荐阅读
- hadoop - 无法执行 import-hive.sh
- graphql - Mirage 需要用于嵌套数据播种的数组
- jquery - jQuery在尝试单击任意位置时关闭模式
- javascript - 聚合框架在 mongodb 中无法正常工作
- python - Facebook 从 image_hash 获取 AdImage url
- python-3.x - 颜色 = Color.query.all()
- reactjs - Reactjs 挂钩中的 Starter 需要从 column.js 组件中调用单击事件 openModal() ,其中事件在 Table.js 中定义
- c++ - 阻止铿锵格式断线
- python - Statsmodels 功效分析 观察次数
- python - 如何使用 KNeighbors 预测在 Google Vision OCR 中选择正确的文本位置?