Es funktioniert, wenn die HTML-Datei lokal ist (auf meinem C-Laufwerk), aber nicht, wenn sich die HTML-Datei auf einem Server befindet und die Image-Datei lokal ist. Warum ist das so?
Mögliche Problemumgehungen?
src=""
Es funktioniert, wenn die HTML-Datei lokal ist (auf meinem C-Laufwerk), aber nicht, wenn sich die HTML-Datei auf einem Server befindet und die Image-Datei lokal ist. Warum ist das so?
Mögliche Problemumgehungen?
src=""
Antworten:
Es wäre eine Sicherheitslücke, wenn der Client lokale Dateisystemdateien anfordern und dann mithilfe von JavaScript herausfinden könnte, was darin enthalten ist.
Die einzige Möglichkeit, dies zu umgehen, besteht darin, eine Erweiterung in einem Browser zu erstellen. Firefox-Erweiterungen und IE-Erweiterungen können auf lokale Ressourcen zugreifen. Chrome ist viel restriktiver.
sollten Sie nicht "file: // C: /localfile.jpg" anstelle von "C: /localfile.jpg" verwenden?
C:
ist kein anerkanntes URI-Schema. Versuchen Sie es file://c|/...
stattdessen.
Ehrlich gesagt war der einfachste Weg, dem Server ein Datei-Hosting hinzuzufügen.
Öffnen Sie IIS
Fügen Sie unter Standardwebsite ein virtuelles Verzeichnis hinzu
Fügen Sie dem Ordner auf dem Laufwerk C: die entsprechenden Berechtigungen für "NETWORK SERVICE" und "IIS AppPool \ DefaultAppPool" hinzu.
Standardwebsite aktualisieren
Und du bist fertig. Sie können jetzt zu jedem Bild in diesem Ordner navigieren, indem Sie zu http: //yourServerName/whateverYourFolderNameIs/yourImage.jpg navigieren und diese URL in Ihrem img src verwenden
Hoffe das hilft jemandem
IE 9: Wenn Sie möchten, dass der Benutzer ein Bild betrachtet, bevor er es auf dem Server veröffentlicht: Der Benutzer sollte die Website zur "Liste vertrauenswürdiger Websites" hinzufügen.
Wir können FileReader () von javascript und die Funktion readAsDataURL (fileContent) verwenden, um die lokale Laufwerks- / Ordnerdatei anzuzeigen . Binden Sie das Änderungsereignis an das Bild und rufen Sie dann die showpreview-Funktion von Javascript auf. Versuche dies -
<!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>
Abgesehen von Newtangs Beobachtung der Sicherheitsregeln, woher wissen Sie, dass jeder, der Ihre Seite anzeigt, die richtigen Bilder hat c:\localfile.jpg
? Das kannst du nicht. Selbst wenn du denkst, dass du es kannst, kannst du es nicht. Zum einen setzt es eine Windows-Umgebung voraus.
Ich sehe zwei Möglichkeiten für das, was Sie versuchen zu tun:
Sie möchten, dass Ihre Webseite, die auf einem Server ausgeführt wird, die Datei auf dem Computer findet, auf dem Sie sie ursprünglich entworfen haben?
Sie möchten, dass es von dem PC abgerufen wird, der auf der Seite angezeigt wird?
Option 1 macht einfach keinen Sinn :)
Option 2 wäre eine Sicherheitslücke. Der Browser verhindert, dass eine Webseite (die aus dem Internet bereitgestellt wird) Inhalte auf den Computer des Betrachters lädt.
Kyle Hudson hat dir gesagt, was du tun musst, aber das ist so grundlegend, dass ich es schwer finde zu glauben, dass dies alles ist, was du tun willst.
Wenn Sie den Google Chrome-Browser verwenden, können Sie diesen verwenden
<img src="E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
Wenn Sie jedoch Mozila Firefox verwenden, müssen Sie "Datei" hinzufügen, z.
<img src="file:E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
Sie müssen das Bild ebenfalls hochladen und dann mit dem Bild auf dem Server verknüpfen.
Was ist, wenn das Bild vom Benutzer ausgewählt wird? Verwenden Sie ein input: file-Tag und zeigen Sie es nach Auswahl des Bildes auf der clientseitigen Webseite an. Das ist für die meisten Dinge machbar. Im Moment versuche ich, es für IE zum Laufen zu bringen, aber wie bei allen Microsoft-Produkten ist es ein Cluster Fork ().
Wenn Sie eine lokale Website nur für sich selbst oder bestimmte Clients bereitstellen, können Sie dies mklink /D MyImages "C:/MyImages"
umgehen, indem Sie im Stammverzeichnis der Website als Administrator in cmd ausgeführt werden. Dann verbindet do im HTML- <img src="MyImages/whatever.jpg">
Code und die von mklink hergestellte symbolische Verknüpfung die relative src-Verknüpfung mit der Verknüpfung auf Ihrem C-Laufwerk. Es hat dieses Problem für mich gelöst und kann anderen helfen, die zu dieser Frage kommen.
(Offensichtlich funktioniert dies nicht für öffentliche Websites, da Sie cmd-Befehle nicht einfach auf den Computern von Personen ausführen können.)
Ich habe viele Techniken ausprobiert und schließlich eine in C # -Seite und JS-Seite gefunden. Sie können dem src-Attribut keinen physischen Pfad zuweisen, aber Sie können die base64-Zeichenfolge als src für das Img-Tag angeben. Schauen wir uns das folgende C # -Codebeispiel an.
<asp:Image ID="imgEvid" src="#" runat="server" Height="99px"/>
C # -Code
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);
}
Hoffe das wird helfen