“Non autorisé à charger une ressource locale: fichier: /// C:… jpg” Java EE Tomcat

J’essaie de récupérer une image de mon système de fichiers après un bon stockage (au lieu de la placer dans la firebase database, je la copie sur le disque et je mets le chemin vers la firebase database)

  1. J’ai stocké l’image dans le dossier c: \ images \ et en supposant que le nom du chemin complet est c: \ images \ mypic.jpg
  2. lorsque j’essaie de le récupérer, définissez l’atsortingbut img src sur en utilisant du code Java
  3. dans la console du navigateur j’ai trouvé cette erreur Not allowed to load local resource: file:///C://images//mypic.jpg

Question: comment résoudre ce problème de chemin? Où dois-je stocker les images? et d’où dois-je les récupérer?

En envoyant une balise , le navigateur de l’utilisateur accède à l’image de son système de fichiers. Si vous devez stocker des images dans un dossier situé dans c:\images je suggère de créer une servlet comme images.jsp, qui prend en paramètre un nom de fichier, puis définit le contenu de la réponse de servlet à une image / jpg, puis charge des octets de l’image de l’emplacement du serveur et le mettre à une réponse.

Mais qu’est-ce que vous utilisez pour créer votre application? est-ce pur servlet? Printemps? JSF?

Ici vous pouvez trouver des informations sur comment faire.

Dans Chrome, vous êtes censé pouvoir autoriser cette fonctionnalité avec un indicateur d’exécution –allow-file-access-from-files

Cependant, il semble qu’il y ait un problème avec les versions actuelles de Chrome (37, 38) où cela ne fonctionne pas à moins que vous ne passiez également l’indicateur d’exécution –disable-web-security

C’est une solution inacceptable, sauf peut-être comme une solution de contournement à court terme, mais elle a été identifiée comme un problème: https://code.google.com/p/chromium/issues/detail?id=379206

Vous avez deux alternatives:

Le premier consiste à créer un ServletImageLoader prenant comme paramètre un identifiant de votre image (le chemin de l’image ou un hachage) que vous utiliserez dans le Servlet pour gérer votre image, et il imprimera dans le stream de réponse le fichier chargé. image du serveur.

Deuxièmement, créez un dossier dans le dossier ROOT de votre application et enregistrez simplement le chemin relatif de vos images.

De nombreux navigateurs ont modifié leurs politiques de sécurité pour ne plus autoriser la lecture de données directement à partir de fichiers partagés ou même de ressources locales. Vous devez soit placer les fichiers quelque part que votre instance tomcat peut les servir et mettre une URL http “régulière” dans le HTML que vous générez. Cela peut être accompli en fournissant un servlet qui lit et fournit le fichier en plaçant le fichier dans un répertoire où tomcat le servira comme contenu “statique”.

Le concept d’emplacement http et d’emplacement du disque est différent. Ce que vous devez faire est:

  1. pour le fichier téléchargé summer.jpg
  2. déplacez-le sous un emplacement connu (vers l’application) sur le disque, par exemple c:\images\summer.jpg
  3. insérer dans un enregistrement db représentant l’image avec le texte summer.jpg
  4. pour l’afficher, utilisez plain
  5. Vous avez besoin de quelque chose (par exemple apache) qui servira c:\images\ sous les /images applications de votre application. Si vous ne pouvez pas le faire, alors à l’étape 2, vous devez enregistrer quelque part sous votre racine Web, par exemple c:\my-applications\demo-app\build\images

Cette erreur signifie que vous ne pouvez pas charger directement les données du système de fichiers car des problèmes de sécurité se posent. La seule solution que je connaisse est de créer un service Web pour servir des fichiers de chargement.

Voici une solution simple expressjs si vous voulez simplement exécuter cette application localement et que la sécurité ne vous préoccupe pas:

Sur votre fichier server.js ou app.js , ajoutez ce qui suit:

 app.use('/local-files', express.static('/')); 

Cela servira votre répertoire racine ENTIRE sous /local-files . Inutile de dire que c’est une très mauvaise idée si vous prévoyez de déployer cette application ailleurs que sur votre ordinateur local.

Maintenant, vous pouvez simplement faire:

  

note: j’utilise macOS. Si vous utilisez Windows, vous devrez peut-être rechercher et supprimer ‘C: \’ de la chaîne de chemin

N’utilisez pas ABSOLUTE PATH pour faire référence au nom de l’image par exemple: C:/xamp/www/Archivos/images/templatemo_image_02_opt_20160401-1244.jpg . Vous devez utiliser la référence à son emplacement dans le serveur Web. Par exemple, en utilisant ../../Archivos/images/templatemo_image_02_opt_20160401-1244.jpg fonction de l’emplacement de votre processus.