Besoin d'aide ?

Upload file

  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    31

    Je suis déjà devant un nouveau problème. Se n'est pas toujours évident d'apprend la nouveauté. J'essais de faire en sorte qu'un utilisateur puisse ajouter un exercice à l'aide d'un formulaire. Le formulaire est bien en enctype="multipart/form-data". Pour une raison que j'ignore, il semble détecter un problème au niveau du mime du fichier : $filename = time() . $media . '.' . $picture->getClientOriginalExtension(); car il me sort l'erreur : Call to a member function getClientOriginalExtension() on null.

    Voici la function du controller :

    public function store(Request $request)
    {
    $media = strreplace(" ", "", $request->name);

    if($request->mediatype == 0) {
    $picture = $request->file('picture');
    $filename = time() . $media . '.' . $picture->getClientOriginalExtension();
    Image::make($picture)->save( public_path('/images/exercises/' . $filename ) );
    }else{
    $request->file('picture')->store('/video/');
    }
    Exercises::create([
    'name' => $request->name,
    'equipment_id' => $request->equipment,
    'type_id' => $request->type,
    'muscle_id' => $request->muscle,
    'config' => $request->config,
    'guide' => $request->guide,
    'mediatype' => $request->mediatype,
    'mainmedia' => $filename,
    ]);
    }

    Éventuel, je sens que je vais avoir des problèmes avec mon else, car je veux pas bloquer la possibilité qu'une personne envois une vidéo de l'exercice. Est-ce que j'aurais mal éditer ma fonction?

  • Avatar de Farris27
    Membre depuis :
    31/10/2017
    Messages :
    32

    as tu mis les bon use au dessus de ton controller ?

  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    31

    Pour tant oui, Storage je l'avais mis pour ma si s'est une vidéo

    use Illuminate\Http\Request;
    use App\Models\Exercises;
    use App\Models\Equipment;
    use App\Models\Type;
    use App\Models\Muscle;
    use Image;
    use Illuminate\Support\Facades\Storage;
  • Avatar de Farris27
    Membre depuis :
    31/10/2017
    Messages :
    32

    le use image est d'un package ?

    Exemple de upload pour une seule image :

    if($request['photo']){
    $image = $request->file('photo');

    $ext = $image->getClientOriginalExtension();
    $filename = uniqid().'.'.$ext;

    $imagePath = 'media';

    $uploadSuccessImage = $image->move($imagePath, $filename);
    }else {
    $filename='pas de photo';
    }
    $livre= new livres;
    $livre->photo = $filename;

    $livre->save();

    et pour upload multiple :

    if($request['apercu']){
    $files = Input::file('apercu');
    foreach($files as $file){
    $ext = $file->getClientOriginalExtension();
    $apercu = uniqid().'.'.$ext;
    $apercuPath = 'apercu';

    $uploadSuccessImage1 = $file->move($apercuPath, $apercu);

    DB::table('apercu')->insert(['fichier'=>$apercu,'livres_id'=>$idLivre]);
    } }
  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    31

    use Image; est pour appeller le package InterventionImage. J'avais trouvé se package en parcourant un des tutoriels de bestmomo.

  • Avatar de Farris27
    Membre depuis :
    31/10/2017
    Messages :
    32

    peux tu montre ton formulaire stp ?

    car ton if me semble bizarre comme le time() ...

    pourquoi ne pas mettre un carbon:now()?

    $timestamp = Carbon::now()->timestamp;
    //ensuite mettre ça
    $filename =$timestamp. $media . '.' . $picture->getClientOriginalExtension();
  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    31

    Voilà le formulaire :

    <div class="card">
    <div class="card-header">
    <h5 class="card-title">Ajouter un exercice</h5>
    </div>
    <div class="card-body">
    <form enctype="multipart/form-data" method="post" action="{{ route('exercises.store') }}">
    <div class="form-group">
    <label for="nameExercise">Nom de l'exercice</label>
    <input type="text" class="form-control" id="nameExercise" name="name">
    </div>
    <div class="form-row">
    <div class="form-group col-md-4">
    <label for="equipment">Équipement</label>
    <select id="equipment" name="equipement" class="form-control">
    <option selected>...</option>
    @foreach ($equipments as $equipment)
    <option value="{{ $equipment->id }}">{{ $equipment->name }}</option>
    @endforeach
    </select>
    </div>
    <div class="form-group col-md-4">
    <label for="type">Type d'exercice</label>
    <select id="type" name="type" class="form-control">
    <option selected>...</option>
    @foreach ($types as $type)
    <option value="{{ $type->id }}">{{ $type->name }}</option>
    @endforeach
    </select>
    </div>
    <div class="form-group col-md-4">
    <label for="muscle">Muscle travaillé</label>
    <select id="muscle" name="muscle" class="form-control">
    <option selected>...</option>
    @foreach ($muscles as $muscle)
    <option value="{{ $muscle->id }}">{{ $muscle->name }}</option>
    @endforeach
    </select>
    </div>
    </div>
    <div class="form-group">
    <label for="config">Configuration de l'équipement</label>
    <textarea id="config" name="config" class="col" rows="10"></textarea>
    </div>
    <div class="form-group">
    <label for="guide">Guide d'exercice</label>
    <textarea id="guide" name="guide" class="col" rows="10"></textarea>
    </div>
    <div class="form-group">
    <label for="mainmedia">Média d'identification</label>
    <input type="file" class="form-control" name="mainmedia">
    </div>
    <div class="form-check form-check-inline">
    <label for="mediatype">Type de média</label>
    <input class="form-check-input" type="radio" name="mediatype" value="0" id="picture">
    <label for="picture" class="form-check-label">Photo</label>
    <input class="form-check-input" type="radio" name="mediatype" value="1" id="video">
    <label for="picture" class="form-check-label">Vidéo</label>
    </div>
    <div class="form-group">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <button type="submit" class="btn btn-primary">Ajouter</button>
    </div>
    </form>
    </div>
    </div>
  • Avatar de Farris27
    Membre depuis :
    31/10/2017
    Messages :
    32

    Pourquoi tu demande un fichier file sur picture qui n'existe pas appart dans un label ?

    fais plutôt ceci non ?

    if($request->mediatype == 0) {

    $picture = $request->file('mainmedia');

    $filename = time() . $media . '.' . $picture->getClientOriginalExtension();

    Image::make($picture)->save( public_path('/images/exercises/' . $filename ) );

    }else{

    $request->file('picture')->store('/video/');

    }
  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    31

    Misère! Que je suis aveugle, une erreur aussi banal qui m'était passé sous le regard. Faut dire que je suis aussi débutant en programmation. Première tantative de projet aussi complexe.

    Merci de ton aide Farris27.

  • Avatar de Farris27
    Membre depuis :
    31/10/2017
    Messages :
    32

    De rien ;)

Vous ne pouvez pas répondre à ce sujet.