October CMS 提供了通过表单提交上传文件的简单功能。为实现最佳性能,该功能可选择接入 AJAX 框架。
在表单上启用文件上传,请在 HTML 表单标签上包含 data-request-files 属性。以下是一个上传文件的最小示例。
<form data-request="onUploadFiles" data-request-files>
<div>
<label>Single File</label>
<input name="single_file" type="file">
</div>
<button data-attach-loading>
Upload
</button>
</form>查看 请求和输入文章 以了解更多有关
files()函数上可用的方法。
在您的 AJAX 处理程序 中,使用 files() 辅助函数访问上传的文件,并调用 store 方法将文件保存到 存储盘。返回值是保存文件的本地文件路径。
接下来将上传的文件存储到 storage/app/userfiles 目录中,并使用生成的文件名。
function onUploadFiles()
{
$filePath = files('single_file')->store('userfiles');
// ...
Flash::success('File saved');
}当文件输入包含 multiple 属性时,files() 助手将返回一个数组作为替代。
<div>
<label>Multi File</label>
<input name="multi_file[]" type="file" multiple>
</div>function onUploadFiles()
{
$filePaths = [];
foreach (files('multi_file') as $file) {
$filePaths[] = $file->store('userfiles');
}
// ...
Flash::success('File saved');
}就像 常规表单验证 一样,文件可以通过使用 Request facade 和 validate 方法进行验证。在验证多个项目时,使用 .* 后缀。以下检查确保上传的文件是图像且大小不超过 1MB。
function onUploadFiles()
{
Request::validate([
'single_file' => 'required|image|max:1024',
'multi_file.*' => 'required|image|max:1024',
]);
Flash::success('Files are valid!');
}当处理配置为使用 文件附件 的模型时,包括使用 文件上传小部件 的 Tailor 模型,您可以将文件上传直接保存到模型上。
最简单的方法是直接在模型上使用 files() 辅助函数设置属性。这支持单个和多个文件上传。
function onUploadFiles()
{
$model = new MyModel;
$model->avatar = files('single_file');
$model->save();
// ...
Flash::success('File saved');
}您也可以将此属性直接设置为一个 System\Models\File 模型对象,以应对各种用例。
$model->avatar = (new File)->fromFile('/path/to/somefile.jpg');
$model->avatar = (new File)->fromData('Some content', 'sometext.txt');
$model->avatar = (new File)->fromUrl('https://example.tld/path/to/avatar.jpg');请参阅 文件附件文章 以了解更多关于使用基于模型的文件附件的信息。