Livewire文件上传无法接收.mp4/.exe文件,且无法获取临时文件大小
问题解决方案
一、无法接收.mp4、.exe、.sys文件的问题
1. 完善组件内的验证规则
你的update方法仅验证了文件大小,未明确允许目标文件类型。需要在验证规则中添加file和mimes规则,指定允许的文件类型:
public function update() { $this->validate([ 'driver' => 'file|mimes:mp4,exe,sys,jpg,png|max:1024' // 1024KB = 1MB,可根据需求调整大小 ]); $this->driver->storeAs('public'); $this->alert('success', 'Uploaded.', ['timerProgressBar' => true, 'width' => 'auto']); }
2. 调整Livewire临时上传配置
Livewire临时文件上传阶段(前端到临时存储)也会应用验证规则。你当前config/livewire.php中的temporary_file_upload.rules为null,使用默认规则['required', 'file', 'max:12288'],若需确保临时上传阶段允许这些文件类型,可显式配置规则:
'temporary_file_upload' => [ // ... 其他配置项 'rules' => ['required', 'file', 'max:12288', 'mimes:mp4,exe,sys,jpg,png'], // 添加允许的MIME类型 // ... 其他配置项 ],
注:若无需限制文件类型,可去掉mimes规则,但出于安全考虑不建议这么做。
二、无法获取livewire-tmp目录下文件大小的问题
Livewire的临时文件通过UploadedFile对象管理,不要直接通过文件路径读取大小,应使用文件对象提供的方法:
// 获取文件大小(单位:字节) $fileSize = $this->driver->getSize(); // 转换为更易读的单位 $fileSizeKB = round($fileSize / 1024, 2); $fileSizeMB = round($fileSizeKB / 1024, 2);
若必须通过路径访问,需注意:
- 临时文件实际存储在
storage/app/livewire-tmp目录下,文件名为随机哈希值,并非原上传文件名; - 确保该目录拥有正确的读写权限(通常Laravel的storage目录权限为755,文件权限为644)。
额外注意事项
- 若前端文件输入框设置了
accept属性,需包含允许的文件类型:<input type="file" wire:model="driver" accept=".mp4,.exe,.sys,.jpg,.png"> - 检查服务器
php.ini配置,确保upload_max_filesize和post_max_size的值大于你设置的文件大小限制。
内容的提问来源于stack exchange,提问作者abdo Chamkha
相关产品推荐
相关产品推荐

