October CMS 提供了在响应中下载文件的简单功能。此功能选择性加入 AJAX 框架以获得最佳性能。
要启用文件下载,请在 HTML 表单或按钮标签上包含 data-request-download 属性。以下是文件下载的最小示例。
<button data-request="onExport" data-request-download>
Download
</button>如果 data-request-download="..." 属性设置在请求触发器上,该属性中的文件名将赋予下载的文件。下面将生成一个名为 data.csv 的文件。
<button data-request="onExport" data-request-download="data.csv">
Download Document
</button>若要在新浏览器窗口中打开文件(通常用于预览 PDF),请将 data-browser-target 属性设置为 _blank。
<button data-request="onExport" data-request-download data-browser-target="_blank">
Open in New Window
</button>当使用 download 属性时,响应可以是一个下载,也可以是一个常规 AJAX 更新。
在你的 AJAX 处理程序 中,你可以返回一个 文件下载 Response 类型,其中 download 方法接受本地磁盘文件路径。
public function onExport()
{
return Response::download(base_path('app/files/installer.zip'));
}要将字符串转换为可下载的响应,同时无需将内容写入磁盘,请使用 streamDownload 方法,该方法接受一个回调 (第一个参数) 和文件名 (第二个参数)。
public function onExport()
{
return Response::streamDownload(function() {
echo 'CSV Contents...';
}, 'export.csv');
}您也可以使用存储服务从媒体库或任何存储引擎下载文件。使用 Storage 门面和 disk 方法指定磁盘名称(第一个参数),然后链式调用 download 方法并传入要下载的文件名(第一个参数)。
public function onExport()
{
return Storage::disk('media')->download('archive.zip');
}当处理 模型文件附件 时,您可以在文件对象上调用 download 方法。
public function onDownload()
{
// ...
return $model->avatar->download();
}以下示例展示了一个可用于下载模型文件附件并指定自定义文件名的CMS页面。它接收附件的id和disk_name参数来验证文件,然后将响应返回给浏览器,其中包含一个取自file_name参数(可选)的自定义文件名。
## pages/download-file.htm
title = "Download File"
url = "/download-file/:id/:disk_name/:file_name?"
layout = "default"function onStart()
{
$file = System\Models\File::find($this->param('id'));
if (!$file || !$file->isPublic()) {
throw new NotFoundException;
}
if ($file->disk_name !== $this->param('disk_name')) {
throw new NotFoundException;
}
$customFileName = $this->param('file_name');
if ($customFileName) {
$file->file_name = $customFileName;
}
return $file->download();
}你可以在 Twig 中使用以下标记链接到此页面,其中 file 变量是 System\Models\File 的一个实例。
{{ 'download-file'|page({
id: file.id,
disk_name: file.disk_name,
file_name: 'my-custom-name.png'
}) }}如果您打算将文件内联显示,例如作为图片,请调用
$file->output()方法。