如何通过验证上传laravel中的pdf/doc文件



我正在尝试创建一个网站,用户可以上传pdf和doc文件。此外,我想把文件保存在存储文件夹中,所以我制作了符号链接,这样它就可以复制公用文件夹中的文件夹。因此,我有一个名为"公共/存储/纸张"的文件夹。这是我的表单,用户可以在其中上传论文。

<form class="form-horizontal" method="post" action="paper" enctype="multipart/form-data">
@csrf
<div class="form-group">
<label for="title">Title of Paper</label>
<input type="text" class="form-control" name="title"  placeholder="Title of Paper" required="required">
</div>
<div class="form-group">
<label for="Paper">Upload Paper</label>
<input type="file" class="form-control" name="paper" required="required" >
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>

在我的控制器上,我写了这段代码,这非常好,就像在我不需要上传文件时将数据保存在数据库中一样。但当我需要上传论文时,验证没有通过。

<?php
namespace AppHttpControllers;
use AppSubmission;
use IlluminateSupportFacadesDB;
use IlluminateSupportFacadesValidator;
use IlluminateHttpRequest;
use IlluminateSupportFacadesFile;
use IlluminateSupportFacadesStorage;
class PapersController extends Controller
{

public function  store(Request $request){
$request->validate([
'title'=>'required',
'paper'=>'required'
]);

$title= $request->input('title');
Validator::make($request->all(),['file'=>"required|string|paper|mimes:pdf,docx"])->validate();
$extension= $request->file("file")->getClientOriginalExtension();
$stringPaperFormat=str_replace(" ", "", $request->input('title'));
$fileName= $stringPaperFormat.".".$extension;
$FileEnconded=  File::get($request->paper);
Storage::disk('local')->put('public/Paper'.$fileName, $FileEnconded);
$newsubmission= array("title"=>$title, "first_name"=>$first_name, "last_name"=>$last_name,"isReviewed"=>$isReviewed, "paper"=>$fileName);
$created= DB::table('submissions')->insert($newsubmission);
if($created){
return "Sucessful";
}else{
return "Not Sucessful";
}

}

}

我无法发现这个问题。任何形式的帮助都将不胜感激。

实际上docdocszip文件,因此您需要在验证规则中添加zip而不是docdocx

此外,您的字段名称为paper,并且在创建验证时使用file。将file更改为paper。您在文件上传验证中使用的paper规则不是内置的验证规则,所以也要删除它。

更改

Validator::make($request->all(),['file'=>"required|string|paper|mimes:pdf,docx"])->validate();

Validator::make($request->all(),['paper'=>"required|string|mimes:pdf,zip"])->validate();

参考文献:Laracast->如何在laravel 5.4 中制定上传pdf、doc和docx文件的验证规则

https://en.wikipedia.org/wiki/Office_Open_XML

最新更新