Puisque je n'aime pas la manière par défaut de présenter un fichier à un utilisateur lorsque "return response () -> file ($ pathToFile);" s'appelle Je voulais créer une version dans laquelle un fichier n'est pas directement affiché dans l'onglet actuel du site Web, mais plutôt dans une fenêtre contextuelle Modal - Un peu comme c'est fait lorsque vous prévisualisez un fichier dans Dropbox.
Alors, ce que j'ai fait C'est ajouter un bouton à ma vue qui appelle ma Route "preview_modal" Cette Route appelle alors ma méthode "preview_modal" dans mon FileController. Cette méthode renvoie le fichier demandé dans le modal.
Mais malheureusement, lorsque le type MIME du fichier demandé n'est pas un type de fichier "texte / *", je reçois ce type de texte présenté dans mon modal:
public function preview_modal(File $file) { return response()->file(storage_path("$file->path")); }
Dans ce cas, c'était un PNG qui était en train d'être ouvert. Ce texte était juste un petit exemple.
Je n'ai aucune idée de ce que je regarde Si quelqu'un sait ce que c'est, j'apprécierais beaucoup. Le "return response () -> file ()" fonctionne correctement pour le même fichier s'il n'est pas appelé dans le modal ajax.
Bouton:
Route::get('preview_modal/{file}', 'FileController@preview_modal')->name('files.preview_modal');
Appel Ajax:
$.ajaxSetup({ headers: { 'X-CSRF-Token': $('meta[name="_token"]').attr('content') } }); $('.load-ajax-modal').click(function () { $.ajax({ type: 'GET', url: $(this).data('path'), success: function (result) { $('#dynamic-modal div.modal-body').html(result); } }); });
Route:
<button data-path="{{ route('files.preview_modal', $file) }}" class="button is-info load-ajax-modal" role="button" data-toggle="modal" data-target="#dynamic-modal">Preview</button>
preview_modal Méthode:
�PNG IHDRq�:sRGB���gAMA���a pHYs���o�d *IDATx^��r�6��~ Ob~��jn9�-��.Q�vË-��ʥ��`ip���L��d��?�E����'0�0�M�af�3Ã6q�a��&�03b���aF����L&�V���H|�Ìt[���kȲ�01����,�|�r�b��`����ã®ï¿½|:��/���� r/[X�>`�]��KH���5�OÞa� ��N�A�|��KX��2�:γ�d ٢��,�
4 Réponses :
vous renvoyez le png entier comme réponse il suffit de renvoyer le nom de l'image puis quel que soit le chemin de l'image utilisé dans modal:
<img src="/images/{{ $imageName}}">
Je le ferais, mais l'image est stockée dans le dossier de stockage de laravel puisque ce fichier appartient à un utilisateur. Par conséquent, je ne peux pas y accéder de cette façon car le dossier de stockage n'est pas accessible publiquement. Je ne peux pas non plus rendre le fichier public depuis le dossier public qui ne permet pas les vérifications d'authentification.
Vous pouvez accéder au dossier de stockage en public, il vous suffit de créer le lien symbolique
Exécutez php artisan storage: link
pour créer un lien symbolique dans laravel
lorsque vous créez un lien symbolique dans laravel, il crée alors le lien symbolique du dossier storage / app / public vers le dossier public / storage. Cela signifie que si vous voulez accéder à des fichiers publiquement, placez tous vos fichiers dans le dossier storage / app / public et accédez-y comme ceci
abc.com/storage/images/picture.png
Ici, cela signifie le test de fichier. png doit être physiquement dans le dossier storage / app / public / images /.
ou vous pouvez créer votre lien symbolique personnalisé pour le stockage dans un dossier public afin que vous puissiez directement utiliser vos images de dossier de stockage
<img src="{{asset('storage/images/test.png')}}" alt="">
Mais tout le monde ne pourrait-il pas accéder à ce fichier s'il se trouvait dans ce dossier public? Disons que ce fichier est une facture. Je ne voudrais pas qu'il soit accessible au public. Ou être trouvé par une sorte de robot d'exploration.
<img src="appurl.com/outPutImage" />
Je recevrai alors à nouveau le même texte «d'erreur» (�PNG IHDRq�: sRGB���gAMA���a pHYs���o�d) et ainsi de suite. Mais cette fois même si ce n'est pas appelé via un modal ajax mais aussi lors de l'appel direct
J'ai fait. C'est ce que j'obtiens en tant que sortie.
Essayez ces deux solutions finales
storage_path ("$ file-> path")
supprimer les guillemets: storage_path($file->path)
parce que vous utilisez la variable et non la chaîne
vous devriez peut-être convertir votre image en base64.
$ path = storage_path ($ file-> path);
$ type = pathinfo ($ chemin, PATHINFO_EXTENSION);
$ data = file_get_contents ($ chemin);
$ base64 = 'données: image /'. $ type. '; base64,'. base64_encode ($ data);
puis utilisez-le en html profitez du compagnon de la journée :)
Merci pour toute l'aide que je ne peux pas essayer maintenant, mais je l'apprécie beaucoup merci!
Transformer l'image en un fichier base64 a fait l'affaire pour moi. Je vous remercie beaucoup pour votre aide!