简体   繁体   English

请求->文件返回 null 为什么?

[英]Request->file returns null why?

So I'm trying to create a Video store of sorts in which you can see the image of the movie, title, length and the option to delete it.所以我正在尝试创建一个视频商店,您可以在其中看到电影的图像、标题、长度以及删除它的选项。 The problem is when I try to upload an image it always returns null.问题是当我尝试上传图像时,它总是返回 null。 Also I use Laravel 5.8.35我也使用 Laravel 5.8.35

I tried with getClientOriginalExtension but it can't work since file returns null我尝试使用getClientOriginalExtension但它无法工作,因为文件返回null

Slika means Image Slika 意为形象

Žanr means Genre Žanr 的意思是流派

Naslov means Title纳斯洛夫的意思是标题

Godina means Year Godina 的意思是年份

Filmovi means Movies Filmovi 的意思是电影

Trajanje means Lenght Trajanje 意味着长度

Akcija means Action Akcija 意味着行动

index.blade.php index.blade.php

<style>
    table,tr,td {
        border: 1px solid black;
    }

    table {
        border-collapse: collapse;
        width: 800px;
        font-size: 30px;
        font-weight: bold;
        text-align: center;
        align-self: center;
    }
</style>

<table>
    <tr style="background-color:lightgray">
        <td>Slika</td>
        <td>Naslov filma</td>
        <td>Godina</td>
        <td>Trajanje</td>
        <td>Akcija</td>
    </tr>
    @foreach($filmovi as $film)
    <tr>
    <td><img src="{{ $film->slika }}" alt="{{$film->slika}}"></td>
        <td>{{ $film->naslov }}</td>
        <td>{{$film->godina}}</td>
        <td>{{$film->trajanje}} minuta</td>
        <td> <a href="{{ route('filmovi.destroy', $film->id) }}" data-method="delete">[obriši]</a></td>

    </tr>
    @endforeach

    <div class="">
        <a href="{{ route('filmovi.create') }}" class="btn btn-primary">Dodaj novi film</a>
    </div>

create.blade.php create.blade.php

<div>

        <form action="{{ route('filmovi.store') }}" method="post">
 Naslov: <br>
 <input type="text" class="form-control" id="naslov" name="naslov">
 <br>
 Žanr: <div class="select">
    <select name="zanr" id="zanr">
        @foreach($zanr as $z )
    <option value="{{ $z->id }}">{{ $z->naziv }}</option>
        @endforeach
      </select>
</div>

  Godina: <div class="select" style="width:200px;">
    <select name="godina" id="godina">
         @for($i = (int)date("1900"); $i<=(int)date("Y"); $i++)
        <option value="{{ $i }}" name="godina" >{{ $i }}</option>
         @endfor
    </select>
  </div>

  Trajanje: <br>
  <input type="text" class="form-control" id="trajanje" name="trajanje">
  <br>

  Slika: <br>
  <form action="{{ route('filmovi.store') }}" method="post" enctype="multipart/form-data">
  <input type="file" name="slika" class="form-control" enctype="multipart/form-data">(max. 64 KB)
  <div class="form-group">
        <a href="{{ route('filmovi.index') }}" class="btn btn-primary">Natrag</a>
        <button type="submit" class="btn btn-success float-right">Objavi</button>
    </div>
  </form>
        </form>
 </div>

controller controller

<?php

namespace App\Http\Controllers;

use App\Filmovi;
use App\Zanr;
use Illuminate\Http\Request;
use App\Traits\UploadTrait;

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

     use UploadTrait;
    public function index()
    {
        $filmovi = Filmovi::all();

        return view('filmovi.index', compact('filmovi'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $zanr = Zanr::all();

        return view('filmovi.create', compact('zanr'));
    }

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


        $filmovi = Filmovi::create([
            'naslov'   => request('naslov'),
            'id_zanr'    => request('zanr'),
            'godina'  => request('godina'),
            'trajanje' => request('trajanje'),
            'slika' => request('slika'),
        ]);

        if($request->has('slika'))
    {
        dd($slike = $request->file("slika"));

        $dirpath = '/uploads/slike/';

        $path=$dirpath . $slike;

        $this->uploadOne($slike, $dirpath, 'public');

        $filmovi->slika = $path;

    }
    $filmovi->save();

        return redirect()->route('filmovi.index');    
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Filmovi  $filmovi
     * @return \Illuminate\Http\Response
     */
    public function show(Filmovi $filmovi)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Filmovi  $filmovi
     * @return \Illuminate\Http\Response
     */
    public function edit(Filmovi $filmovi)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Filmovi  $filmovi
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Filmovi $filmovi)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Filmovi  $filmovi
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $filmovi = Filmovi::find($id);
        $filmovi->delete();

    //   \Mail::to($post->user)->send(new PostDeleted($post));

        return redirect()->route('filmovi.index');
    }

}

UploadTrait上传特征

<?php 
namespace App\Traits;

use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;

trait UploadTrait
{
    public function uploadOne(UploadedFile $uploadedFile, $dirpath = null, $disk = 'public')
    {
        $file = $uploadedFile->storeAs($dirpath, $uploadedFile,$disk);

        return $file;
    }
}
?>

As far as I can see there are two possibilities: 1. pass csrf-token in your form 2. add enctype="multipart/form-data" to your form.据我所知,有两种可能性: 1. 在表单中传递csrf-token 2. 将enctype="multipart/form-data"添加到表单中。

Moreover you should save it to your storage and link it using symlink (use command php artisan storage:link ) check the docs: https://laravel.com/docs/5.8/filesystem此外,您应该将其保存到您的存储并使用符号链接链接它(使用命令php artisan storage:link )检查文档: https://laravel.com/docs/5.8/filesystem

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM