Funziona se il file html è locale (sulla mia unità C), ma non se il file html è su un server e il file immagine è locale. Perché?
Eventuali soluzioni alternative?
Funziona se il file html è locale (sulla mia unità C), ma non se il file html è su un server e il file immagine è locale. Perché?
Eventuali soluzioni alternative?
src=""
Risposte:
Sarebbe una vulnerabilità di sicurezza se il client potesse richiedere i file del file system locale e quindi utilizzare JavaScript per capire cosa contengono.
L'unico modo per aggirare questo è creare un'estensione in un browser. Le estensioni di Firefox e le estensioni di IE possono accedere alle risorse locali. Chrome è molto più restrittivo.
non dovresti usare "file: // C: /localfile.jpg" invece di "C: /localfile.jpg"?
Ai browser non è consentito accedere al file system locale a meno che non si acceda a una pagina html locale. Devi caricare l'immagine da qualche parte. Se si trova nella stessa directory del file html, puoi usare<img src="localfile.jpg"/>
C:
non è uno schema URI riconosciuto. Prova file://c|/...
invece.
Onestamente il modo più semplice era aggiungere l'hosting di file al server.
Apri IIS
Aggiungi una directory virtuale nel sito Web predefinito
Aggiungere le autorizzazioni appropriate alla cartella sull'unità C: per "SERVIZIO DI RETE" e "IIS AppPool \ DefaultAppPool"
Aggiorna sito Web predefinito
E hai finito. Ora puoi passare a qualsiasi immagine in quella cartella navigando su http: //yourServerName/wwhatYourFolderNameIs/yourImage.jpg e utilizzare quell'URL nel tuo img src
Spero che questo aiuti qualcuno
IE 9: Se si desidera che l'utente dia un'occhiata all'immagine prima di pubblicarla sul server: L'utente deve AGGIUNGERE il sito Web a "elenco siti Web affidabili".
possiamo usare FileReader () di javascript e la sua funzione readAsDataURL (fileContent) per mostrare il file dell'unità / cartella locale. Associa l'evento di modifica all'immagine, quindi chiama la funzione showpreview di javascript. Prova questo -
<!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>
A parte l'osservazione di Newtang sulle regole di sicurezza, come fai a sapere che chiunque visualizzi la tua pagina avrà le immagini corrette c:\localfile.jpg
? Non puoi. Anche se pensi di poterlo fare, non puoi. Presuppone un ambiente Windows, per prima cosa.
Vedo due possibilità per ciò che stai cercando di fare:
Vuoi che la tua pagina web, in esecuzione su un server, trovi il file sul computer su cui l'hai originariamente progettato?
Vuoi che lo recuperi dal pc che sta visualizzando nella pagina?
L'opzione 1 non ha senso :)
L'opzione 2 rappresenterebbe una falla di sicurezza, il browser vieta a una pagina Web (servita dal Web) di caricare contenuti sul computer del visualizzatore.
Kyle Hudson ti ha detto cosa devi fare, ma è così semplice che trovo difficile credere che questo sia tutto ciò che vuoi fare.
se utilizzi il browser Google Chrome puoi utilizzarlo in questo modo
<img src="E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
Ma se usi Mozila Firefox devi aggiungere "file" ex.
<img src="file:E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
È necessario caricare anche l'immagine, quindi collegarla all'immagine sul server.
che ne dici di avere l'immagine come qualcosa selezionato dall'utente? Utilizzare un input: tag file e poi, dopo aver selezionato l'immagine, mostrarla sulla pagina web del client? Questo è fattibile per la maggior parte delle cose. In questo momento sto cercando di farlo funzionare per IE, ma come con tutti i prodotti Microsoft, è un fork del cluster ().
Se stai distribuendo un sito Web locale solo per te o per determinati client, puoi aggirare il problema eseguendo mklink /D MyImages "C:/MyImages"
nella directory principale del sito Web come amministratore in cmd. Quindi in html, do <img src="MyImages/whatever.jpg">
e il collegamento simbolico stabilito da mklink collegherà il relativo collegamento src con il collegamento sul tuo drive C. Ha risolto questo problema per me, quindi può aiutare gli altri che arrivano a questa domanda.
(Ovviamente questo non funzionerà per i siti Web pubblici poiché non è possibile eseguire facilmente i comandi cmd sui computer delle persone)
Ho provato molte tecniche e alla fine ne ho trovata una in C # side e JS Side. Non puoi dare un percorso fisico all'attributo src ma puoi dare la stringa base64 come src al tag Img. Esaminiamo il seguente esempio di codice C #.
<asp:Image ID="imgEvid" src="#" runat="server" Height="99px"/>
Codice 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);
}
Spero che questo ti aiuti