php - 请求-> 文件返回 null 为什么?
问题描述
所以我正在尝试创建一个视频商店,您可以在其中看到电影的图像、标题、长度以及删除它的选项。问题是当我尝试上传图像时,它总是返回 null。我也使用 Laravel 5.8.35
我试过getClientOriginalExtension
但它不能工作,因为文件返回null
Slika 意为形象
Žanr 的意思是流派
纳斯洛夫的意思是标题
Godina 的意思是年份
Filmovi 的意思是电影
Trajanje 意味着长度
Akcija 意味着行动
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>
创建.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>
控制器
<?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');
}
}
上传特征
<?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;
}
}
?>
解决方案
据我所知,有两种可能性:1.传递csrf-token
您的表单 2.添加enctype="multipart/form-data"
到您的表单。
此外,您应该将其保存到您的存储中并使用符号链接(使用命令php artisan storage:link
)链接它检查文档:https ://laravel.com/docs/5.8/filesystem
推荐阅读
- asp.net - 在 UBUNTU 上托管 ASP.NET CORE 无法通过客户端的浏览器访问
- mysql - 需要帮助以使用 activedataprovider 构建查询
- java - 有没有办法将列标题包装在 SWT 表头中?
- mysql - 可以在 UPDATE 语句中重复同一列吗?
- r - R:如何在取消嵌套嵌套的 tibble 时保留名称?
- c - Haskell FFI:包装包含单独分配的字符串(char *)的C结构
- angular - 角度 7 生产构建失败
- sql - 在表/视图中添加字段
- python - 我在主页中有很多 Jupyter 笔记本,它们会在 Jupyter 启动时显示。我如何清洁其中一些?
- vue.js - eslint的html报告中某些文件没有输出