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');请参阅 文件附件文章 以了解更多关于使用基于模型的文件附件的信息。