【问题标题】:Laravel 5.3 - Image validation not workingLaravel 5.3 - 图像验证不起作用
【发布时间】:2017-01-07 16:38:40
【问题描述】:

我对图像或 mime 的整体验证有疑问。

这是我的代码:

$this->validate($request, [
        'title' => 'required|max:50',
        'content' => 'required|min:20',
        'description' => 'required|max:140',
        'file' => 'image'
    ]);

当我尝试上传任何文件时出现错误:

文件上传失败。

当我没有 image 标志时,一切正常。

我可以输入requiredmax:5000 之类的内容。

我查看了文档,它应该可以工作,但它没有。

那我做错了什么?

编辑:

添加表格:

 {!! Form::open(['method' => 'POST', 'action' => 'PostController@store', 'files' => 'true' ]) !!}

            <div class="form-group">

                {!! Form::label('title', 'Title:') !!}<br>
                {!! Form::text('title', null, ['class' => 'form-control']) !!}
                <small>Max 50 characters</small>

                <br>

                {!! Form::label('description', 'Description:') !!}<br>
                {!! Form::textarea('description', null, ['class' => 'form-control', 'rows' => 2, 'cols' => 50]) !!}
                <small>Max 140 characters</small>

                <br>

                {!! Form::label('content', 'Content:') !!}<br>
                {!! Form::textarea('content', null, ['class' => 'form-control', 'id' =>'content', 'rows' => 8, 'cols' => 50]) !!}

                <br>

                {!! Form::label('file', 'Upload a thumbnail here:') !!} <br>
                {!! Form::file('file', null, ['class' => 'form-control']) !!} <br>
                <small>Only jpeg, png, bmp, gif, or svg</small>

            </div>

                {!! Form::submit(null, ['class' => 'btn btn-primary']) !!}

                {!! Form::close() !!}

编辑 2:

添加了html:

<form method="POST" action="https://blog.luukwuijster.eu" accept-charset="UTF-8" enctype="multipart/form-data"><input name="_token" type="hidden" value="N72xyc8mmbdFGrS78sdhIqh25awN30AboL9ecqGm">

            <div class="form-group">

                <label for="title">Title:</label><br>
                <input class="form-control" name="title" type="text" id="title">
                <small>Max 50 characters</small>

                <br>

                <label for="description">Description:</label><br>
                <textarea class="form-control" rows="2" cols="50" name="description" id="description"></textarea>
                <small>Max 140 characters</small>

                <br>

                <label for="content">Content:</label><br>
                <textarea class="form-control" id="content" rows="8" cols="50" name="content" style="display: none;"></textarea>

                <br>

                <label for="file">Upload a thumbnail here:</label> <br>
                <input name="file" type="file" id="file"> <br>
                <small>Only jpeg, png, bmp, gif, or svg</small>

            </div>

            <input class="btn btn-primary" type="submit">

            </form>

编辑 3:

添加了控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;
use App\User;
use Illuminate\Support\Facades\Auth;
use GrahamCampbell\Markdown\Facades\Markdown;

class PostController extends Controller
{
/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */

public function __construct()
{
    $this->middleware('auth')->except('index', 'show');
}

public function index()
{

    $posts = Post::latest()->get();

    return view('welcome', compact('posts'));
}


/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
    return view('create');
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    $input = $request->all();

    $file = $request->file('file');

    if($file){
        $name = rand(1, 1000000000).'_'.$file->getClientOriginalName();

        $file->move('images', $name);

        $input['thumbnail'] = $name;
    }else{
        $input['thumbnail'] = "No_Image.png";
    }

    //TODO: validatie voor de thumbnails.

    $this->validate($request->all(), [
        'title' => 'required|max:50',
        'content' => 'required|min:20',
        'description' => 'required|max:140',
        'file' => 'image'
    ]);

    Auth::user()->post()->create($input);

    return redirect('/');
}

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    $post = Post::findOrFail($id);
    $content = Markdown::convertToHtml($post->content);

    return view('post', compact('post', 'content'));
}

/**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function edit($id)
{
    $post = Auth::user()->post()->findOrFail($id);
    return view('edit', compact('post'));
}

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, $id)
{
    $input = $request->all();

    $file = $request->file('file');

    if($file){
        $name = rand(1, 1000000000).'_'.$file->getClientOriginalName();

        $file->move('images', $name);

        $input['thumbnail'] = $name;
    }

    //TODO: validatie voor de thumbnails.

    $this->validate($request, [
        'title' => 'required|max:50',
        'content' => 'required|min:20',
        'description' => 'required|max:140',
        'file' => 'image'
    ]);

    Auth::user()->post()->findOrFail($id)->update($input);

    return redirect('/home');
}

/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function destroy($id)
{
    Auth::user()->post()->withTrashed()->findOrFail($id)->forceDelete();

    return redirect('/recyclebin');
}

public function restore($id)
{
    Auth::user()->post()->withTrashed()->findOrFail($id)->restore();

    return redirect('/home');
}

public function recyclebin()
{
    $posts = Post::onlyTrashed()->get();

    return view('recyclebin', compact('posts'));
}

public function remove($id){

    //Post::findOrFail($id)->delete();
    Auth::user()->post()->findOrFail($id)->delete();
    return redirect('/home');

}
}

【问题讨论】:

  • 你能把你的表格给我看看吗?
  • 我已将其添加到帖子中。
  • 我不知道这是否是一个问题,但可能是因为'files' =&gt; 'true'(你在''中输入了true)。尝试更改为'files' =&gt; true、@Luuk Wuijster。向我展示您在网络源中获得的表单
  • 不,这不起作用,我将 html 添加到帖子中
  • 这是 FormRequest 验证还是在控制器内部?发布整个控制器或自定义表单请求将有助于故障排除。如果这是在控制器中,则应在 validate 方法中将 $request 更改为 $request->all()

标签: php laravel laravel-5 laravel-5.3


【解决方案1】:

在您的开始表单标签中添加:

enctype="multipart/form-data"

并在文件输入(实际上传的位置)中添加:

multiple="multiple"

编辑: 在每种形式中,您都应该使用csrf_field() 方法。也只是在打开表单标签之前添加。

2019 年更新: 您可以添加 @csrf 指令而不是 csrf_field() 方法。是一样的,只是对某些人来说更方便。

希望对你有所帮助。

【讨论】:

  • 如果我记得的话,'files' =&gt; true 应该可以完成这项工作(写下enctype="multipart/form-data")。我说的不对吗?
  • 不,不工作。并且 Form::open() 会自动添加一个 csrf_field()。
【解决方案2】:

试着像这样改变你的控制器 --

public function store(Request $request) {
    $this->validate($request, [
        'title' => 'required|max:50',
        'content' => 'required|min:20',
        'description' => 'required|max:140',
        'file' => 'image'
    ]);
    $input = $request->all();

    $file = $request->file('file');

    if($request->hasFile('file')){
        $name = rand(1, 1000000000).'_'.$file->getClientOriginalName();

        $file->move('images', $name);

        $input['thumbnail'] = $name;
    }else{
        $input['thumbnail'] = "No_Image.png";
    }

    Auth::user()->post()->create($input);

    return redirect('/');
}

并将'files' =&gt; 'true' 更改为'files' =&gt; true

【讨论】:

    【解决方案3】:

    这是我的代码

    $validator = Validator::make($input, [  
       'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048'
    ])
    if ($validator - > fails()) {
       return $this - > sendError('Validation Error.', $validator - > errors());
    }
    

    【讨论】:

    • 欢迎来到 Stack Overflow!纯代码答案并不是特别有用。请添加一些关于此代码如何解决问题的说明。
    猜你喜欢
    • 2015-08-30
    • 2018-06-23
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多