[英]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.