Cela fonctionne si le fichier html est local (sur mon lecteur C), mais pas si le fichier html est sur un serveur et le fichier image est local. Pourquoi donc?
Des solutions de contournement possibles?
Cela fonctionne si le fichier html est local (sur mon lecteur C), mais pas si le fichier html est sur un serveur et le fichier image est local. Pourquoi donc?
Des solutions de contournement possibles?
src=""
Réponses:
Ce serait une faille de sécurité si le client pouvait demander des fichiers du système de fichiers local, puis utiliser JavaScript pour comprendre ce qu'ils contiennent.
Le seul moyen de contourner ce problème est de créer une extension dans un navigateur. Les extensions Firefox et les extensions IE peuvent accéder aux ressources locales. Chrome est beaucoup plus restrictif.
ne devriez-vous pas utiliser "file: // C: /localfile.jpg" au lieu de "C: /localfile.jpg"?
Les navigateurs ne sont pas autorisés à accéder au système de fichiers local à moins que vous n'accédiez à une page html locale. Vous devez télécharger l'image quelque part. S'il se trouve dans le même répertoire que le fichier html, vous pouvez utiliser<img src="localfile.jpg"/>
C:
n'est pas un schéma d'URI reconnu. Essayez file://c|/...
plutôt.
Honnêtement, le moyen le plus simple était d'ajouter l'hébergement de fichiers au serveur.
Ouvrez IIS
Ajouter un répertoire virtuel sous le site Web par défaut
Ajoutez les autorisations appropriées au dossier sur le lecteur C: pour «NETWORK SERVICE» et «IIS AppPool \ DefaultAppPool»
Actualiser le site Web par défaut
Et tu as fini. Vous pouvez maintenant accéder à n'importe quelle image de ce dossier en accédant à http: //yourServerName/wwhatYourFolderNameIs/yourImage.jpg et utiliser cette URL dans votre img src
J'espère que cela aide quelqu'un
IE 9: Si vous voulez que l'utilisateur regarde l'image avant de la publier sur le serveur: L'utilisateur doit AJOUTER le site Web à la "liste des sites Web de confiance".
nous pouvons utiliser FileReader () de javascript et sa fonction readAsDataURL (fileContent) pour afficher le fichier de lecteur / dossier local. Liez l'événement de modification à l'image, puis appelez la fonction showpreview de javascript. Essaye ça -
<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;'>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title></title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
function showpreview(e) {
var reader = new FileReader();
reader.onload = function (e) {
$("#previewImage").attr("src", e.target.result);
}
//Imagepath.files[0] is blob type
reader.readAsDataURL(e.files[0]);
}
</script>
</head>
<body >
<div>
<input type="file" name="fileupload" value="fileupload" id="fileupload" onchange='showpreview(this)'>
</div>
<div>
</div>
<div>
<img width="50%" id="previewImage">
</div>
</body>
</html>
À part l'observation de Newtang sur les règles de sécurité, comment allez-vous savoir que quiconque consulte votre page aura les bonnes images c:\localfile.jpg
? Vous ne pouvez pas. Même si vous pensez que vous pouvez, vous ne pouvez pas. Cela suppose un environnement Windows, d'une part.
Je vois deux possibilités pour ce que vous essayez de faire:
Vous voulez que votre page Web, exécutée sur un serveur, trouve le fichier sur l'ordinateur sur lequel vous l'avez conçue à l'origine?
Vous voulez qu'il le récupère sur le PC affiché sur la page?
L'option 1 n'a tout simplement pas de sens :)
L'option 2 serait une faille de sécurité, le navigateur interdit à une page Web (servie à partir du Web) de charger du contenu sur la machine du spectateur.
Kyle Hudson vous a dit ce que vous devez faire, mais c'est tellement basique que j'ai du mal à croire que c'est tout ce que vous voulez faire.
si vous utilisez le navigateur Google Chrome, vous pouvez utiliser comme ça
<img src="E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
Mais si vous utilisez Mozila Firefox, vous devez ajouter un "fichier" ex.
<img src="file:E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
Vous devez également télécharger l'image, puis créer un lien vers l'image sur le serveur.
qu'en est-il du fait que l'image soit quelque chose de sélectionné par l'utilisateur? Utiliser une balise input: file, puis après avoir sélectionné l'image, l'afficher sur la page Web du client? C'est faisable pour la plupart des choses. En ce moment, j'essaie de le faire fonctionner pour IE, mais comme pour tous les produits Microsoft, il s'agit d'un cluster fork ().
Si vous déployez un site Web local uniquement pour vous ou certains clients, vous pouvez contourner ce problème mklink /D MyImages "C:/MyImages"
en exécutant le répertoire racine du site Web en tant qu'administrateur dans cmd. Puis dans le html, faites<img src="MyImages/whatever.jpg">
et le lien symbolique établi par mklink reliera le lien src relatif avec le lien sur votre lecteur C. Cela a résolu ce problème pour moi, donc cela peut aider d'autres personnes qui viennent à cette question.
(Évidemment, cela ne fonctionnera pas pour les sites Web publics car vous ne pouvez pas exécuter facilement les commandes cmd sur les ordinateurs des gens)
J'ai essayé beaucoup de techniques et j'en ai finalement trouvé une côté C # et côté JS. Vous ne pouvez pas donner de chemin physique à l'attribut src mais vous pouvez donner la chaîne base64 comme balise src to Img. Regardons l'exemple de code C # ci-dessous.
<asp:Image ID="imgEvid" src="#" runat="server" Height="99px"/>
Code C #
if (File.Exists(filepath)
{
byte[] imageArray = System.IO.File.ReadAllBytes(filepath);
string base64ImageRepresentation = Convert.ToBase64String(imageArray);
var val = $"data: image/png; base64,{base64ImageRepresentation}";
imgEvid.Attributes.Add("src", val);
}
J'espère que cela aidera