phplaravelpostman

how to upload audio with a file in laravel?


making an api to upload multifile with an audio everything is working but audio file can't uploaded and uploading with dd($request)->all then it works but while uploading with any condition its gives null value on every clientoriginalName ,extension, how t fix this...

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Storage;
use App\File;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\Auth;


class FileController extends Controller
{
      public function store(Request $request)
    {
        $this->validate($request, [
            'title' => 'required',
            'description' => 'nullable',
            'file' => 'required|file|mimes:' . File::getAllExtensions() . '|max:' . File::getMaxSize(),
            'Fileaudio' =>'nullable|mimes:audio/mpeg,mpga,mp3,wav,aac'
        ]);
////////////      All files       //////////////////
   $file = new File();
  $title = $request->title;
  $uploaded_file = $request->file('file');
  $filename = $uploaded_file->getClientOriginalName();
  $original_ext = $uploaded_file->getClientOriginalExtension();
  $type = $file->getType($original_ext);
  $filepath = $uploaded_file->storeAs('public/upload/files/',$filename);
  $files = URL::asset('storage/upload/files/' . $filename);
  $description = $request->description;
  $user_id = Auth::user()->id;
/////////// Audio at null    /////////////////
     $Fileaudio = $request->file('audio');
     $audioname = $Fileaudio->getClientOriginalName();
     $audiopath =$Fileaudio->storeAs('public/upload/files/audio/', $audioname);

  //return $audiopath;
   dd($request->all());

 }

}

and i am sending request to postman...


Solution

  • create a folder 'upload/files' inside storage/app/public , and /upload/files/audio

    then run command : php artisan storage:link

    this command will link your storage folder to public folder

    update your code :

    namespace App\Http\Controllers\Api;
    
    use Illuminate\Http\Request;
    use App\Http\Controllers\Controller;
    use Illuminate\Support\Facades\Storage;
    use App\File;
    use Illuminate\Support\Facades\DB;
    use Illuminate\Support\Facades\Response;
    use Illuminate\Support\Facades\URL;
    use Illuminate\Support\Facades\Auth;
    use Carbon\Carbon;
    
    public function store(Request $request)
        {
            // validation
            $this->validate($request, [
                'title' => 'required',
                'description' => 'nullable',
                'file' => 'required|file|mimes:jpeg,jpg,png,gif|max:2048',
                'audio' =>'nullable|file|mimes:audio/mpeg,mpga,mp3,wav,aac'
            ]); 
    
             // code for upload 'file'
    
              if($request->hasFile('file')){
                $uniqueid=uniqid();
                $original_name=$request->file('file')->getClientOriginalName();
                $size=$request->file('file')->getSize();
                $extension=$request->file('file')->getClientOriginalExtension();
                $name=Carbon::now()->format('Ymd').'_'.$uniqueid.'.'.$extension;
                $imagepath=url('/storage/uploads/files/'.$name);
                $path=$request->file('file')->storeAs('public/uploads/files/',$name);  
               }
    
    
            // code for upload 'audio'
            // handle multiple files 
           if(is_array($request->file('audio')))
            {
             $audios=array();
             foreach($request->file('audio') as $file) {
                $uniqueid=uniqid();
                $original_name=$file->getClientOriginalName();
                $size=$file->getSize();
                $extension=$file->getClientOriginalExtension();
                $filename=Carbon::now()->format('Ymd').'_'.$uniqueid.'.'.$extension;
                $audiopath=url('/storage/upload/files/audio/'.$filename);
                $path=$file->storeAs('/upload/files/audio',$filename);
                array_push($audios,$audiopath);
             }
             $all_audios=implode(",",$audios);
         }else{ 
             // handle single file 
             if($request->hasFile('audio')){
             $uniqueid=uniqid();
             $original_name=$request->file('audio')->getClientOriginalName();
             $size=$request->file('audio')->getSize();
             $extension=$request->file('audio')->getClientOriginalExtension();
             $filename=Carbon::now()->format('Ymd').'_'.$uniqueid.'.'.$extension;
             $audiopath=url('/storage/upload/files/audio/'.$filename);
             $path=$file->storeAs('public/upload/files/audio/',$filename);
             $all_audios=$audiopath;
            }
        }
    
    }
    

    in your postman request :

    add key : "file"  for image file , 
              "audio" for audio file