我有一个输入字段,可以让人们上传文件。 我希望他们可以上传,像doc这样的文件,以及像csv,xlsx这样的文件。
当我尝试使用.doc时没有任何问题,但是当我尝试使用excel文件时,验证器会失败并说不是好的扩展。
在这里你可以看到我的代码,这两行评论是我尝试的另一种解决方案,它也不起作用:(。
欢迎任何帮助。
public function postFile(Request $request)
{ //Règle de validation avec les type de fichiers acceptés
if(isset($request->file)){
//dd($request);
$validator=Validator::make($request->all(),[
'file'=>'required|max:50000|mimes:xlsx,doc,docx,ppt,pptx,ods,odt,odp,application/csv,application/excel,
application/vnd.ms-excel, application/vnd.msexcel,
text/csv, text/anytext, text/plain, text/x-c,
text/comma-separated-values,
inode/x-empty,
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
/* 'extension' => strtolower($request->file->getClientOriginalExtension()),
'extension'=>'required|in:doc,csv,xlsx,xls,docx,ppt,odt,ods,odp'*/
]);
if ($validator->fails()) {
return back()
->withErrors($validator);
}
答案 0 :(得分:7)
好的,我的错。 我在这个网站上尝试了另一种解决方案,但它确实有用。 谢谢你的帮助奥丁。 这是我在这个网站上的第一个问题,我会看看我现在是否可以帮助别人。 我在某人需要时提出解决方案的代码:)。
$validator = Validator::make(
[
'file' => $request->file,
'extension' => strtolower($request->file->getClientOriginalExtension()),
],
[
'file' => 'required',
'extension' => 'required|in:doc,csv,xlsx,xls,docx,ppt,odt,ods,odp',
]
);
答案 1 :(得分:4)
如果要编写扩展名( xlsx,doc,docx ),请使用“mimes”。 如果使用像 application / vnd.ms-excel 这样的mime类型,则必须使用验证规则mimetype
更多mime类型:more mime-types
$validator=Validator::make($request->all(),[
//use this
'file'=>'required|max:50000|mimes:xlsx,doc,docx,ppt,pptx,ods,odt,odp'
//or this
'file'=>'required|max:50000|mimetypes:application/csv,application/excel,
application/vnd.ms-excel, application/vnd.msexcel,
text/csv, text/anytext, text/plain, text/x-c,
text/comma-separated-values,
inode/x-empty,
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
]
答案 2 :(得分:3)
这是我在Laravel 6中通过检查文件扩展名来完成的操作。
创建新的验证规则:
for x in link:
driver.get(x)
try:
names = driver.find_elements_by_css_selector("td")
i = 0
while i <= len(names):
address = names[i].text.splitlines()
r = len(address)
if r == 4:
print(x, " | ",address[0], " | ", address[1], " | ", address[2], " | ", address[3])
elif r == 3:
print(x, " | ",address[0], " | ", address[1], " | ", address[2])
else:
pass
i=i+1
except(NoSuchElementException, IndexError):
continue
这里是php artisan make:rule ExcelRule
,它检查文件扩展名:
ExcelRule
如您所见,我在这里检查namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Http\UploadedFile;
class ExcelRule implements Rule
{
private $file;
public function __construct(UploadedFile $file)
{
$this->file = $file;
}
public function passes($attribute, $value)
{
$extension = strtolower($this->file->getClientOriginalExtension());
return in_array($extension, ['csv', 'xls', 'xlsx']);
}
public function message()
{
return 'The excel file must be a file of type: csv, xls, xlsx.';
}
}
,csv
或xls
。您可以添加所需的任何其他扩展。
在控制器中使用它:
xlsx
答案 3 :(得分:1)
在Laravel中,您可以使用 After Hooks 验证使用扩展程序上传文件。阅读更多here!
$validator->after(function ($validator) use ($request){
if($this->checkExcelFile($request->file('file')->getClientOriginalExtension()) == false) {
//return validator with error by file input name
$validator->errors()->add('file', 'The file must be a file of type: csv, xlsx, xls');
}
});
function checkExcelFile($file_ext){
$valid=array(
'csv','xls','xlsx' // add your extensions here.
);
return in_array($file_ext,$valid) ? true : false;
}
答案 4 :(得分:0)
首先告诉 这不是正确的解决方案 。但你可以试试这个。
我也搜索了这一点并且在验证excel file
时遇到了很多麻烦,并且不幸的是他们的哑剧类型不适用于此。
if($request->hasFile('file'))
{
$extension = File::extension($request->file->getClientOriginalName());
if ($extension == "xlsx" || $extension == "xls" || $extension == "csv") {
//'Your file is a valid xls or csv file'
}else {
//'File is a '.$extension.' file.!! Please upload a valid xls/csv file..!!');
}
}
namspace中的必须包含use File;
您可以通过这种方式验证任何文件,谢谢。
答案 5 :(得分:0)
我尝试了laravel提供的验证器,但似乎都不起作用。.这给了我一个尝试使用普通php进行验证的想法,它的工作原理像cham
$extensions = array("xls","xlsx","xlm","xla","xlc","xlt","xlw");
$result = array($request->file('import_file')->getClientOriginalExtension());
if(in_array($result[0],$extensions)){
// Do something when Succeeded
}else{
// Do something when it fails
}
答案 6 :(得分:0)
就是这样!我亲自尝试过,如果您仅测试mimes:csv
,则在文件名包含空格时会失败。
我通过验证的方法是使用required|mimes:csv,txt
。
但是正如您已经建议的那样,您需要进行一些手动验证。
关于用户体验,前端验证是一件好事,但是您永远不能只相信在与服务器不同的计算机上运行的验证。如果您要进行任何JavaScript验证,请始终在服务器中再次对其进行验证。
在您的情况下,由于例外文件名而不是格式错误是一个例外,因此我会使用mimes:csv,txt放宽对mime类型的验证,然后使用一个程序包来解析CSV文件,通常是此程序包格式无效时引发异常。
用于处理CSV的两个不错的软件包是:
[https://github.com/Maatwebsite/Laravel-Excel] [http://csv.thephpleague.com/] 希望对您有所帮助。
[https://laracasts.com/discuss/channels/general-discussion/csv-file-upload-request-validation]