【问题标题】:laravel livewire image formlaravel livewire 图像形式
【发布时间】:2021-03-03 13:07:29
【问题描述】:

我有表单提交功能,它在普通控制器中工作得很好,但是由于我已经将我的功能移动到 livewire 组件它返回错误

错误

ErrorException
Undefined index: attachment 

代码

错误行注释

$chat = new BidChat;
// other fields
if ($this->attachment) {
    $attachment = $this->attachment;
    $filename = 'chat-attachment' . '-' . time() . '.' . $attachment->getClientOriginalExtension();
    $location = public_path('images/' . $filename);


    $valid_images = ['image/jpeg','image/gif','image/png'];
    if(in_array($_FILES['attachment']['type'], $valid_images)){ <-- error comes from this line
        Image::make($attachment)->resize(1300, 362)->save($location);
    }

    $chat->attachment = $filename;
}
$chat->save();

调试

dd($this-&gt;attachment);的结果

Livewire\TemporaryUploadedFile {#1559 ▼
  +"disk": "local"
  #storage: Illuminate\Filesystem\FilesystemAdapter {#1538 ▶}
  #path: "livewire-tmp/najcwwb2OMw5wq0khtJp5hvkFfWk36-metaYmlkLWF0dGFjaG1lbnQtMTUzODEwMDQ0MS5wbmc=-.png"
  -test: false
  -originalName: "najcwwb2OMw5wq0khtJp5hvkFfWk36-metaYmlkLWF0dGFjaG1lbnQtMTUzODEwMDQ0MS5wbmc=-.png"
  -mimeType: "application/octet-stream"
  -error: 0
  #hashName: null
  path: "C:\Users\root\AppData\Local\Temp"
  filename: "najcwwb2OMw5wq0khtJp5hvkFfWk36-metaYmlkLWF0dGFjaG1lbnQtMTUzODEwMDQ0MS5wbmc=-.png"
  basename: "phpBAD0.tmp"
  pathname: "C:\Users\root\AppData\Local\Temp\phpBAD0.tmp"
  extension: "tmp"
  realPath: "C:\laragon\www\mysite\storage\app\livewire-tmp/najcwwb2OMw5wq0khtJp5hvkFfWk36-metaYmlkLWF0dGFjaG1lbnQtMTUzODEwMDQ0MS5wbmc=-.png"
  size: 15036
  writable: false
  readable: false
  executable: false
  file: false
  dir: false
  link: false
}

HTML

<form wire:submit.prevent="submit" enctype="multipart/form-data" method="post">
  @csrf
  <input type="file" wire:model="attachment" class="form-control" />

  <button class="button btn-block">Save</button>
</form>

有什么想法吗?

更新

It seems to be known issue

【问题讨论】:

  • 你需要像这样更改你的上传文件代码laravel-livewire.com/docs/2.x/file-uploads
  • @KamleshPaul 我想你误会了我,我的问题不是上传而是验证所选文件type 我需要获取文件类型'image/jpeg','image/gif','image/png' 如果我的文件是其中任何一个,那么我会调整大小它。但如果是不同类型i.e. zip 我不运行调整大小功能

标签: php laravel laravel-livewire


【解决方案1】:

在 livewire 中,您不能 $_FILES['attachment']['type'] 访问此数据进行验证,您可以这样做

$chat = new BidChat;
// other fields
if ($this->attachment) {
    $attachment = $this->attachment;
    $filename = 'chat-attachment' . '-' . time() . '.' . $attachment->getClientOriginalExtension();
    $location = public_path('images/' . $filename);

    $this->validate([
        'attachment' => 'image|mimes:jpeg,png,jpg,gif',
    ]);

    Image::make($attachment)->resize(1300, 362)->save($location);
    $chat->attachment = $filename;
}
$chat->save();

参考链接https://laravel-livewire.com/docs/2.x/file-uploads

【讨论】:

  • 谢谢,但我认为那是错误的,正如我在之前的评论中提到的,文件不限于图像,它可以是其他类型,如 zip 或 PDF 等。我只需要 @987654324 @如果是图片,如果是zip、PDF等。我不需要使用Image::make
  • ` $this->validate()` 如果类型不匹配会抛出错误,所以它不会反应Image::make($ 这一行
  • 没错,我不希望它返回错误。我希望允许上传所有文件 rar、zip、PDF、docs、doc、xlxs jpg、png、gif,只要调整图像大小即可。
  • 这就是为什么我将图像验证与一般 laravel 验证分开并创建 $valid_images
猜你喜欢
  • 2021-06-18
  • 2021-03-15
  • 2021-11-07
  • 1970-01-01
  • 2020-12-12
  • 2021-05-19
  • 2021-01-21
  • 1970-01-01
  • 2021-07-19
相关资源
最近更新 更多