2017-03-19 11 views
0

Laravel 5.4では、フォームの提出が行われると、リクエスト内のファイル(ある場合)がIlluminate \ Http \ FileまたはIlluminate \ Http \ UploadedFileインスタンスに渡されます。しかし、ファイルの代わりに、そのファイルのURLが入力として渡されるとしましょう。当然のことながら、サーバーはそのURLを要求してファイルをダウンロードする必要があります。このシナリオでファイルをどのように検証しますか? (画像や動画の有無を確認したいとします)Laravelを使用してリモートURLからダウンロードしたファイルを検証します。5.4

答えて

0

例として、カスタムValidatorクラスを使用できます。

基本的にフォームの検証を行うコントローラがあります。そして、あなたは、コントローラでファイルをダウンロードして、ディスクやデータベースへのすべてのメタデータに保存することができます

<?php 

namespace App\Providers; 

use Config; 
use Illuminate\Support\ServiceProvider; 
use Validator; 

class AppServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     Validator::extend('file_link', 'App\Validators\[email protected]','File Link should be valid url and contain file'); 
    } 

    /** 
    * Register any application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 

<?php 

namespace App\Validators; 

class FileLinkValidator 
{ 
    public function validate($attribute, $value, $parameters, $validator) 
    { 
     $isValid = false; 

     $ch = curl_init($value); 
     curl_setopt($ch, CURLOPT_NOBODY, true); 
     curl_exec($ch); 

     $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

     if($code == 200){ 
      $allowedContentTypes = [ 
       'image/jpeg' 
      ]; 

      $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); 

      if(in_array($contentType,$allowedContentTypes)){ 
       $isValid = true; 
      } 
     } 

     curl_close($ch); 

     return $isValid; 
    } 
} 

登録バリ:

<?php 

namespace App\Http\Controllers; 

use App\Article; 
use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 

use Validator; 

class ArticleController extends Controller 
{ 
    /** 
    * Store a newly created resource in storage. 
    * 
    * @return Response 
    */ 
    public function store($id = 0) 
    { 
     $rules = [ 
      'title' => 'required', 
      'body'  => 'required', 
      'fileLink' => 'file_link', 
     ]; 

     $validator = Validator::make(Input::all(), $rules); 

     // process the login 
     if ($validator->fails()) { 

      return redirect() 
       ->route('article.create') 
       ->withErrors($validator); 

     } else { 

      //Other code 
     } 
    } 

} 

その後、カスタムバリデータを作成する必要があります。しかし、ユーザーの安全性を高めるためには、別のレベルの検証を実行する必要があります。

+0

こんにちは、お返事ありがとうございます。別のレベルの検証ではどういう意味ですか? – comos234

+0

サーバーにファイルをダウンロードして保存する場合にのみ必要です。したがって、実際にダウンロードしたビデオや画像ではなく、他の種類のファイルであることを確認する必要があります。 –

関連する問題