foreach 语句导致多文件上传中未定义的变量 fileNameToStore

Posted

技术标签:

【中文标题】foreach 语句导致多文件上传中未定义的变量 fileNameToStore【英文标题】:foreach statement causes undefined variable fileNameToStore in multiple file upload 【发布时间】:2021-04-08 11:00:33 【问题描述】:

我尝试上传多个文件,因此我尝试稍微修改代码。但每次我添加 foreach($request->file('image') as $file)。我总是收到有关未定义变量的错误。我在下面附上了我的控制器代码,知道如何解决这个问题并进行多文件上传吗?

    if($request->hasFile('image'))
    
        foreach($request->file('image') as $file)
        
        $filenameWithExt =$request->file('image')->getClientOriginalName();
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        $extension = $request->file('image')->getClientOriginalExtension();
        $fileNameToStore = $filename. '_'.time().'.'.$extension;
        $path = $request->file('image')->storeAs('public/images', $fileNameToStore);
        
    
    $post = new Post;
    $post->image = $fileNameToStore;
    $post->save();
    return redirect('/dashboard')->with('success', 'Post Created!');

这里是create.blade.php

@extends('layouts.app')

@section('content')
    <h1>Upload Images</h1>
    !! Form::open(['action' => 'PostsController@store', 'method'=> 'POST','enctype'=>'multipart/form-data'])!!
    <div class="form-group">
        Form::file('image',['multiple'=>'true', 'files'=>'true'])
    </div>
    
   Form::submit('Submit',['class' => 'btn btn-success'])
   !!Form::close()!!

【问题讨论】:

我可以出示表格吗? 你能发布你的错误吗? undefined variable 什么? !! Form::open(['action' => 'PostsController@store', 'method'=> 'POST','enctype'=>'multipart/form-data'])!! Form::file('cover_image',['multiple'=>'true', 'files'=>'true']) Form::submit('Submit' ,['class' => 'btn btn-success']) !!Form::close()!! 我得到未定义的变量:fileNameToStore 错误 @Kaye 我认为你应该把你的 html 也放进去,这样我们就可以看到它是多个图像数组,并且可以为你编写完整的解决方案 【参考方案1】:

如果我正确理解你。尝试在foreach 中添加fileNameToStore 变量:

$errors = [];
$post = new Post;
if ($request->hasFile('cover_image')) 
    foreach ($request->file('cover_image') as $file) 
        $filenameWithExt =$request->file('image')->getClientOriginalName();
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        $extension = $request->file('image')->getClientOriginalExtension();
        $fileNameToStore = $filename. '_'.time().'.'.$extension;
        $path = $request->file('image')->move('public/images', $fileNameToStore);
        $post->cover_image = $fileNameToStore;
    
    if (! fileNameToStore) 
        $errors[] = false;
    
    if (count($errors) > 0) 
        return redirect('/dashboard')->with('error', 'Somthing went wrong!');
    

$post->save()
return redirect('/dashboard')->with('success', 'Post Created!');

希望对您有所帮助。 PS 将image 替换为cover_image

【讨论】:

哇,它成功了!但没有上传文件。它只是说帖子已创建但不是文件夹中的文件 @Kaye 请检查上传目录权限 @Kaye 我编辑了我的答案。我认为您需要将$request-&gt;file('image')-&gt;storeAs 替换为$request-&gt;file('image')-&gt;move 哦,我没有注意到您的编辑。它现在正在工作。谢谢德米特里【参考方案2】:

你得到Undefined variable: fileNameToStore 这意味着你没有得到文件并且仍然尝试访问$fileNameToStore所以你需要在这样的if条件中添加它

if ($request->hasFile('image')) 
    foreach ($request->file('image') as $file) 

        $filenameWithExt = $request->file('image')->getClientOriginalName();
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        $extension = $request->file('image')->getClientOriginalExtension();
        $fileNameToStore = $filename . '_' . time() . '.' . $extension;
        $path = $request->file('image')->storeAs('public/images', $fileNameToStore);
    
    $post = new Post;
    $post->cover_image = $fileNameToStore;
    $post->save();
    return redirect('/dashboard')->with('success', 'Post Created!');

return redirect('/dashboard')->with('error', 'Somthing went wrong!');

注意这只是Undefined variable: fileNameToStore不上传图片的解决方案

【讨论】:

如何修复我的代码以使多个文件上传正常工作? $request-&gt;file('image') 这个图像数组吗?是你的用途 我不太确定。我只是学习 laravel 的新手 试试dd($request-&gt;file('image'))并检查 Illuminate\Http\UploadedFile #1216 ▼ -test: false -originalName: "img1.jpg" -mimeType: "image/jpeg" -error: 0 #hashName: null path: "C: \xampp\tmp" 文件名:"phpA275.tmp" 基名:"phpA275.tmp" 路径名:"C:\xampp\tmp\phpA275.tmp" 扩展名:"tmp" 真实路径:"C:\xampp\tmp\phpA275. tmp" aTime: 2021-04-08 11:30:20 mTime: 2021-04-08 11:30:20 cTime: 2021-04-08 11:30:20 inode: 0 size: 29888 perms: 0100666 owner: 0组:0 类型:“文件”可写:真可读:真可执行:假文件:真目录:假链接:假

以上是关于foreach 语句导致多文件上传中未定义的变量 fileNameToStore的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中未显示的部门

C# Foreach 语句不包含 GetEnumerator 的公共定义

PHP中未定义的类变量

JBuilder中未定义的局部变量或方法“json”

如何使用Foreach为每个用户以不同的名称上传相同的文件。

winform 怎么实现在上传时可以一次选择多文件