You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:09:51