我是laravel和october cms的新手。我想添加一个按钮,允许用户下载PDF文件,' a.pdf',而无需指向新页面。我知道我必须使用AJAX并发送下载http响应,以使浏览器显示“另存为...”。对话框。到目前为止,这就是我所取得的成就:
title = "Sandbox"
url = "/test"
layout = "default"
==
<?php
function onDownload()
{
$pathToFile = Url::to("/storage/app/media/a.pdf");
$fileName = "download.pdf";
$headers = [
'HTTP/1.1 200 OK',
'Pragma: public',
'Content-Type: application/pdf'
];
return Response::download($pathToFile, $fileName, $headers);
}
?>
==
<div class="container">
<form class="form-inline" data-request="onDownload">
<button type="submit" class="btn btn-primary" data-attach-loading>Download</button>
</form>
</div>
我得到&#34;文件&#34; http://localhost/october/storage/app/media/a.pdf&#34;不存在&#34;使用上面的代码时出错。
我做错了什么?
答案 0 :(得分:0)
请将标题更改为关联数组
$headers = array(
'Content-Type'=>'application/pdf',
);
答案 1 :(得分:0)
对于可能觉得有用的任何人(此功能适用于通过媒体管理器上传的文件)。通过在我的布局代码php部分中添加AJAX处理程序,可以完成这项工作。
function onDownloadButtonClicked(){
$pathToFile = base_path('storage/app/media/path/actual filename here');
$fileName = "filename shown on download here";
$headers = [
'HTTP/1.1 200 OK',
'Pragma: public',
'Content-Type: application/pdf'
];
return Response::download($pathToFile, $fileName, $headers);
}
在页面和部分页面上添加了
{{ form_open({ request: 'onDownloadButtonClicked' }) }}
<button type="submit" class="tg-btn tg-btnicon" data-attach-loading>
<i class="fa fa-file-pdf-o"></i> Download Here
</button>
{{ form_close() }}
更新:对于使用插件Octobercms通过后端上传的文件,它会生成动态链接。要下载文件,只需创建一个前端组件。遵循简单的教程Watch + learn来创建用于后端上传的简单插件模型,以及用于准系统前端下载组件的Mastering components。获取文件详细信息后,将使用简单的href进行文件下载。
<a href="{{ post.attachment.path }}"
download="{{ post.attachment.file_name }}"><i class="fa fa-download"></i>   Download File</a>
名称插件和附件可以是任何东西,具体取决于插件模型的表单设计。