音频验证问题laravel 5.4

时间:2017-06-17 12:42:12

标签: php laravel laravel-5.3 laravel-5.4 laravel-validation

我正在尝试验证我的表单请求。我正在做的是我要上传音频,即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">&times;</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>

8 个答案:

答案 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',
]);