我正在尝试验证我的表单请求。我正在做的是我要上传音频,即mp3,wav等,我遇到的问题是它不断向我发回错误消息,说'文件类型必须是mp3',我试过上传一个图像,它说文件类型必须是MP3,我也尝试上传MP3,它说同样的事情,下面是我的音频控制器。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Validator;
class UploadController extends Controller
{
public function uploadsingle(Request $request)
{
$validator = Validator::make($request->all(), [
'song' => 'required|mimes:image/png',
]);
if($validator->fails()){
return redirect()->back()->withErrors($validator)->withInput();
}
///save audio, etc
echo 'validation passed';
}
}
这是我的HTML代码
<title>Upload page</title>
@include('layouts.page-life')
@include('layouts.navbar')
<h1>Upload Page</h1>
<br>
<form action="{{ route('doupload') }}" method="POST">
{{ csrf_field() }}
@if (count($errors) > 0)
<div class="alert alert-danger alert-dismissible" role="alert">
<ul>
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<input name="song" type="file"/>
<br>
<button class="btn">Submit</button>
</form>
答案 0 :(得分:1)
以上大多数答案都是正确的。我的情况是我忘记将enctype =“ multipart / form-data”添加到我的表单标签中,如下所示:
<form action="some url" method="some method" enctype="multipart/form-data">
stuff
</form>
答案 1 :(得分:0)
更新您的代码以反映
对于mp3
- 使用mpga
。
$validator = Validator::make($request->all(), [
'song' => 'required|mimes:mpga,wav',
]);
答案 2 :(得分:0)
尝试mimes:mpga&#39;对于mp3文件。 &#39;默剧:WAV&#39;应该适用于wav文件。
$validator = Validator::make($request->all(), [
'song' => 'required|mimes:mpga,wav',
]);
检查扩展名, http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
答案 3 :(得分:0)
我用过
$validator = Validator::make($request->all(), [
'song' => 'required|mimes:audio/mpeg',
]);
...它有效,它正确验证了mp3文件,非常感谢你的帮助:)
答案 4 :(得分:0)
以下验证将接受wav,mp3等。此代码对我有用。
$validator = Validator::make($request->all(), [
'song' => 'required|mimes:application/octet-stream,audio/mpeg,mpga,mp3,wav',
]);
或将其写入单独的请求文件中,例如:app/Http/Requests/SongStoreRequest.php
public function rules(){
['song' => 'required|mimes:application/octet-stream,audio/mpeg,mpga,mp3,wav'];
}
答案 5 :(得分:0)
尝试一下:
$this->validate($request, [
'file_mp3' => ['required', function ($attribute, $value, $fail) {
if ($value->getClientOriginalExtension() != 'mp3') {
$fail(':attribute must be .mp3!');
}
}]
]);
答案 6 :(得分:0)
我遇到了同样的问题,但是在本文中我找到了答案。
http://www.thedevlogs.com/laravel-custom-validation-mp3-ogg-extension-files-only/
Laravel的getMimeType()基于本机mime_content_type()方法,该方法在检测某些mp3文件时遇到问题。
您最好的选择是使用这样的自定义MIME检测器来完成这项工作。
因此,这就是我为我工作的结果。首先,我打开文件: \ app \ Providers \ AppServiceProvider.php
然后,在启动方法中,我添加了以下代码:
public function boot()
{
//Added by B.Singh
Validator::extend('mp3_ogg_extension', function($attribute, $value, $parameters, $validator) {
if(!empty($value->getClientOriginalExtension()) && ($value->getClientOriginalExtension() == 'mp3' || $value->getClientOriginalExtension() == 'ogg')){
return true;
}else{
return false;
}
});
}
因此在您的请求中,请使用以下方式:
public function rules()
{
$rules = [
'example' => 'required|mp3_ogg_extension'
];
return $rules;
}
public function messages()
{
$messages = [
'example.mp3_ogg_extension' => 'REQUIRED WITH VALIDATION, YEAH'
];
return $messages;
}
如果不清楚,您可以提出要求!
答案 7 :(得分:-1)
在Laravel 5.5版本中:
这不是正确的格式,因为它是通用验证,但目前它是唯一可以验证仅制作了mp3的格式。
$validator = Validator::make($request->all(), [
'audio' => 'required|mimetypes:application/octet-stream',
]);