Bonjour tout le monde,
Je tente d'afficher des image uploadés par l'utilisateur et utilisant le storage interne. J'ai fais de nombreuses méthodes, de nombreux testes, parfois tout semble concordé et pourtant, aucun affichage.
Je vous montre l'étape dans laquelle je suis actuellement:
Front-end:
Controller/upload:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 <form id="{{ $product->id }}" method="POST" action="{{ route('uploadImage') }}" enctype="multipart/form-data"> @csrf <input type="hidden" name="ID" name="ID" value="{{ $product->id }}"> <div class="form-group row"> <label for="Description" class="col-sm-2 col-form-label">Description {{ $product->support }} - @if($product->support === "Promotion Petit Format") 250 @else 520 @endif caractères maximum</label> <div class="col-sm-10"> @if($product->support === "Promotion Petit Format") <textarea rows="4" cols="50" id="Description_FR" name="Description_FR" placeholder="FR" maxlength="200"></textarea> <textarea rows="4" cols="50" id="Description_DE" name="Description_DE" placeholder="DE" maxlength="200"></textarea> <textarea rows="4" cols="50" id="Description_IT" name="Description_IT" placeholder="IT" maxlength="200"></textarea> @else <textarea rows="4" cols="50" id="Description_FR" name="Description_FR" placeholder="FR" maxlength="520"></textarea> <textarea rows="4" cols="50" id="Description_DE" name="Description_DE" placeholder="DE" maxlength="520"></textarea> <textarea rows="4" cols="50" id="Description_IT" name="Description_IT" placeholder="IT" maxlength="520"></textarea> @endif </div> </div> <div class="form-group row"> <label for="Image" class="col-sm-2 col-form-label">Image</label> <div class="col-sm-10"> <input type="file" name="images[]" id="images" multiple /> </div> </div> <div class="form-group row"> <label for="Image" class="col-sm-2 col-form-label"></label> <div class="col-sm-10"> <input type="submit" class="btn btn-success" value="Envoyer" /> </div> </div> </form>
Résultat retourné pour 1 image uploadé en base de donnée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 public function uploadImage(Request $request) { //FindOrFail is always better. $product = Product::findOrFail($request->ID); $errors = []; $errorFound = false; if($product->description_fr === NULL && $product->description_de === NULL && $product->description_it === NULL && $product->imageURL === NULL) { if($request["Description_FR"] === NULL && $request["Description_DE"] === NULL && $request["Description_IT"] === NULL) { array_push($errors, "Au moins une description doit être donnée au produit."); $errorFound = true; } if(!$request->hasFile('images')) { array_push($errors, "Au moins une image est obligatoire."); $errorFound = true; } } if($errorFound) return back()->with('errors', $errors); if($request["Description_FR"] != NULL) $product->description_fr = $request["Description_FR"]; if($request["Description_IT"] != NULL) $product->description_it = $request["Description_IT"]; if($request["Description_DE"] != NULL) $product->description_de = $request["Description_DE"]; $imagesPath = []; if($request->images != NULL) { if(is_array($request->file('images')) || is_object($request->file('images'))) { foreach ($request->file('images') as $key => $image) { if ($request->file('images')[$key]->isValid()) { $path = $request->file('images')[$key]->storePublicly('uploads/images'); array_push($imagesPath, $path); } else { array_push($errors, "Erreur dans le traitement de l'image."); return back()->with('errors', $errors); } } } } $product->imageURL = serialize($imagesPath); $product->completed = true; $product->save(); return back()->with('success', 'Les données ont été mises à jour avec succès.'); }
a:1:{i:0;s:60:"uploads/images/oGP6CIHc3Aj9l7Msb4Cet0lofwfmPTswv4lVHop2.jpeg";}
Controller/details:
détails.blade.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public function details($id) { $product = Product::findOrFail($id); $unserialized_images = unserialize($product->imageURL); return view("details", ["product" => $product->first(), "images" => $unserialized_images]); }
url retournée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 @foreach ($images as $image) <img src="{{ Storage::disk('public')->url($image) }}"> @endforeach
<img src="http://localhost/storage/uploads/images/oGP6CIHc3Aj9l7Msb4Cet0lofwfmPTswv4lVHop2.jpeg">
error 404. Alors j'adapte manuellement et mets:
<img src="http://localhost:8000/storage/app/uploads/images/oGP6CIHc3Aj9l7Msb4Cet0lofwfmPTswv4lVHop2.jpeg">
Tel que stocké physiquement sur le disque:
mais avec la même erreur j'ai déjà eu été plus précis:
Il est impossible d'afficher l'image ! :/
Dans l'espoir que vous pourrez m'aider
Partager