2017-01-07 4 views
2

У меня проблема с проверкой изображений или мимов в целом.Laravel 5.3 - Проверка изображения не работает

Это мой код:

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

При попытке загрузить любой файл, я получаю ошибку:

The file failed to upload.

Когда я не имею image флаг, Everthing просто отлично работает.

Я могу положить вещи как required или max:5000.

Я посмотрел документацию, и она должна работать, но это не так.

Так что я делаю неправильно?

РЕДАКТИРОВАТЬ:

Добавлена ​​форма:

{!! Form::open(['method' => 'POST', 'action' => '[email protected]', '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() !!} 

EDIT 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'); 

} 
} 
+0

вы можете показать мне свою форму? – Danielius

+0

Я добавил его к сообщению. –

+1

Я не знаю, может ли это быть проблемой, но, возможно, это из-за '' files '=>' true'' (вы положили true в ''). Попробуйте перейти на '' files '=> true', @Luuk Wuijster. Покажите мне свою форму, которую вы получаете в веб-источнике – Danielius

ответ

1

Попробуйте изменить вам контроллер, как это -

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' => 'true' к 'files' => true

+0

Хорошо, это решило, спасибо большое! –

0

В вашей форме открытия тега добавьте это:

enctype="multipart/form-data" 

и во входном файле (где вы на самом деле загружаете его), добавьте это:

multiple="multiple" 

Edit: В каждой форме вы должны использовать метод csrf_field(). добавьте также только для тега формы открытия.

Надеюсь, это вам поможет.

+0

, если я помню, '' files '=> true' должен выполнить задание (напишите, что 'enctype =" multipart/form-data "'). Разве я не прав? – Danielius

+0

Нет, не работает. И Форма :: open() автоматически добавляет csrf_field(). –

Смежные вопросы