我实现了一个用于上传3个不同文件的表单。
这是一个:
<form method="POST" action="{{ route('register_update' , Auth::user()->id) }}" enctype="multipart/form-data">
<input type="hidden" name="_token" value="{{{ csrf_token() }}}" />
<div class="file-container">
<input type="file" name="carte-id" id="id-file" class="input-file">
<div class="fake-input-file">
<div class="cross-container" id="cross-cont1">
<i class="icon-plus-symbol" id="cross1"></i>
</div>
<div class="file-label" id="id-label">
<label>Carte d'identité</label>
</div>
</div>
</div>
这是我的控制器中的功能:
public function registerUpdate(CardAvsRequest $request){
$id = Auth::user()->id;
$first_name = User::find($id)->student->first_name;
$last_name = User::find($id)->student->last_name;
$name = $first_name . " " . $last_name;
$message = "";
if ($request->hasFile('carte-id'))
{
$image1 = $request->file('carte-id');
if($image1->isValid())
{
if ($request->hasFile('avs'))
{
$image2 = $request->file('avs');
if($image2->isValid())
{
if ($request->hasFile('permit'))
{
$image3 = $request->file('permit');
if($image3->isValid())
{
$path = config('card.path')."/$id";
$name = "carte-id.".$image1->getClientOriginalExtension();
$image1->move($path, $name);
$path = config('card.path')."/$id";
$name = "avs.".$image2->getClientOriginalExtension();
$image2->move($path, $name);
$path = config('card.path')."/$id";
$name = "permit.".$image3->getClientOriginalExtension();
$image3->move($path, $name);
$message = "Super ! Vous avez importé tous les fichiers nécessaires.";
//ici on dit dans la DB que l'utilisateur à uploadé tous les fichiers
}
}
}
}
}
}
return redirect()->route('account', $id)->with('message', $message);
}
以下是CardAvsRequest规则:
public function rules()
{
return [
'carte-id' => 'mimes:jpg,png,pdf,gif,jpeg,tiff,doc,docx,odt|max:10000',
'avs' => 'mimes:jpg,png,pdf,gif,jpeg,tiff,doc,docx,odt|max:10000',
'permit' => 'mimes:jpg,png,pdf,gif,jpeg,tiff,doc,docx,odt|max:10000',
];
}
但是每当我尝试上传应该生成验证错误的文件(例如视频文件或可执行文件)时,我都会遇到这样的错误:
TokenMismatchException in VerifyCsrfToken.php line 67
我只是希望我的错误显示不是laravel。
有什么想法吗?
答案 0 :(得分:1)
令牌行应为
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
只有两个花括号而不是三个
答案 1 :(得分:0)
你可以替换它:
<input type="hidden" name="_token" value="{{{ csrf_token() }}}" />
with:
{{ csrf_field() }}
这将为您生成所有的HTML。所以它会产生这个例子。
<input type="hidden" name="_token" value="vVGUrt0Grroh7CpmI8blFH6pLQnWQzi6WBWqpZzG">
答案 2 :(得分:0)
请检查您的laravel安装路径与配置文件session.php
中设置的路径相同。另一个解决方案是在'App\Http\Middleware\VerifyCsrfToken'
文件夹下的kernel.php中注释行app\http
。但是这不是一个正确的方法。