J'essaie de récupérer une image de mon système de fichiers après un bon stockage (au lieu de la mettre dans la base de données, je la copie sur le disque et je mets le chemin de la base de données)
<img src="c:\images\mypic.jps">
en utilisant du code Java Not allowed to load local resource: file:///C://images//mypic.jpg
Question: comment résoudre ce problème de chemin? Où devrais-je stocker les images? et d'où dois-je les récupérer?
envoyer la balise <img src="c:\images\mypic.jpg">
ferait que le navigateur de l'utilisateur accède à l'image depuis son système de fichiers. Si vous devez stocker des images dans un dossier situé dans c:\images
, je vous suggérerais de créer un servlet tel que images.jsp. En tant que paramètre, il prend le nom d'un fichier, puis définit le contenu de la réponse du servlet sur 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 quelques informations sur la façon de le faire.
Dans Chrome, vous êtes censé pouvoir autoriser cette fonctionnalité avec un indicateur d'exécution --allow-file-access-from-files
Cependant, il semble y avoir un problème avec les versions actuelles de Chrome (37, 38) où cela ne fonctionne pas, à moins que vous ne transmettiez également l'indicateur d'exécution --disable-web-security
C'est une solution inacceptable, sauf peut-être comme 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
De nombreux navigateurs ont modifié leurs politiques de sécurité pour ne plus permettre la lecture de données directement à partir de partages de fichiers ou même de ressources locales. Vous devez soit placer les fichiers à un endroit où votre instance Tomcat peut les servir et placer une URL http "normale" dans le code HTML que vous générez. Cela peut être accompli soit en fournissant un servlet qui lit et fournit le fichier en le plaçant dans un répertoire où Tomcat le servira comme contenu "statique".
Vous avez deux alternatives:
La première consiste à créer un ServletImageLoader qui prendrait en 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 qui sera ensuite imprimé dans le flux de réponse. image du serveur.
Deuxièmement, créez un dossier dans le dossier ROOT de votre application et enregistrez simplement le chemin relatif vers vos images.
Voici une solution expressjs
simple si vous souhaitez simplement exécuter cette application localement et que la sécurité ne vous préoccupe pas:
Dans votre fichier server.js
ou app.js
, ajoutez les éléments suivants:
app.use('/local-files', express.static('/'));
Cela servira votre répertoire racine ENTIER sous /local-files
. Inutile de dire que c'est une très mauvaise idée si vous envisagez de déployer cette application ailleurs que sur votre ordinateur local.
Maintenant, vous pouvez simplement faire:
<img src="/local-files/images/mypic.jps"/>
note: je suis sous macOS. Si vous utilisez Windows, vous devrez peut-être rechercher et supprimer "C: \" de la chaîne de chemin d'accès
Cette erreur signifie que vous ne pouvez pas charger directement les données du système de fichiers car il y a des problèmes de sécurité. La seule solution que je connaisse consiste à créer un service Web pour traiter les fichiers chargés.
Le concept d'emplacement http et d'emplacement de disque est différent. Ce que vous devez faire c'est:
summer.jpg
c:\images\summer.jpg
summer.jpg
<img src="images/summer.jpg" />
c:\images\
sous le /images
de votre application. Si vous ne pouvez pas le faire, à l'étape 2, vous devez enregistrer quelque part sous votre racine Web, par exemple c:\my-applications\demo-app\build\images
.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, utilisez ../../Archivos/images/templatemo_image_02_opt_20160401-1244.jpg
en fonction de l'emplacement du processus.