在我的表单中,我有file input
,用户可以在其中上传图片,现在我想使用此输入不仅可以获取图片,还可以使用其他类型的文件,例如zip
,{{1 }},pdf
,txt
和doc
我当前的代码仅支持图像
docx
表格
//validation
"attachment" => "nullable:image",
//function
if ($request->hasFile('attachment')) {
$attachment = $request->file('attachment');
$filename = 'project-attachment' . '-' . time() . '.' . $attachment->getClientOriginalExtension();
$location = public_path('images/' . $filename);
Image::make($attachment)->resize(1300, 362)->save($location);
$project->attachment = $filename;
}
{{Form::file('attachment', array('class' => 'form-control'))}}
?根据我做出的以下回答:
3 MB
和我的功能
//validation
"attachment" => "nullable|mimetypes:image/jpeg,application/pdf,image/gif,image/png,text/plain,application/msword,application/zip|max:3000",
上面的代码确实上传图像,并且在我上传例如if ($request->hasFile('attachment')) {
$attachment = $request->file('attachment');
$filename = 'project-attachment' . '-' . time() . '.' . $attachment->getClientOriginalExtension();
$location = public_path('images/' . $filename);
$valid_images = ['image/jpeg','image/gif','image/png'];
if(in_array($_FILES['attachment']['type'], $valid_images)){
Image::make($attachment)->resize(1300, 362)->save($location);
}
$project->attachment = $filename;
}
文件时不会返回错误,但问题是如果文件不是图像类型,它将不会存储到主机
有什么主意吗?
答案 0 :(得分:1)
验证
您的验证可能不会起作用,因为松散地说,哑剧不仅是文件扩展名,还是描述文件或文档内容的标头信息。
正确的验证应该是这样的:
"attachment" => "nullable|'mimetypes:image/jpeg,application/pdf ..'|max:3000",
您可以在此处添加其余内容: https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
关于图片的错误
仅当上传的文件实际上是图像时,才应执行与图像有关的部分。为此,您应该为JPG,PNG,GIF或WebP图像创建一个哑剧数组。
$valid_images = ['image/jpeg','',''];
if(in_array($_FILES['attachment']['type'], $valid_images)){
//Code Related to Images
Image::make($attachment)->resize(1300, 362)->save($location);
}
要存储任何其他文件 我想这应该在其他部分,因为图像已经被保存。
$attachment->storeAs($location,$filenaem);
增加上传大小
在位于 etc / php / php.ini 的php.ini文件中,编辑
upload_max_filesize = xM
post_max_size = xM
将 x 替换为您要设置的新限制。请记住,大小不能大于服务器的大小,否则接下来将出现服务器错误。