web-dev-qa-db-fra.com

"Non autorisé à charger la 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 mettre dans la base de données, je la copie sur le disque et je mets le chemin de la base de données) 

  1. J'avais stocker l'image dans le dossier c:\images\et en supposant que le nom du chemin complet soit c:\images\mypic.jpg 
  2. lorsque j'essaie de le récupérer, définissez l'attribut img src sur <img src="c:\images\mypic.jps"> en utilisant du code Java 
  3. j'ai trouvé cette erreur dans la console du navigateur 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?

39
K.Ariche

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.

20
T.G

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

11
Roger

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".

3
Brett Okken

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. 

3
Mifmif

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

1

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. 

1
Harun ERGUL

Le concept d'emplacement http et d'emplacement de disque est différent. Ce que vous devez faire c'est:

  1. pour le fichier téléchargé summer.jpg
  2. déplacez-le sous un emplacement connu (de l'application) sur le disque, par exemple c:\images\summer.jpg
  3. insérer dans l'enregistrement de la base de données représentant l'image avec le texte summer.jpg
  4. pour l'afficher, utilisez plain <img src="images/summer.jpg" />
  5. vous avez besoin de quelque chose (par exemple Apache) qui servira 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.
1
cherouvim

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. 

0
user6147214