2010-11-03 22 views
67

Funziona se il file html è locale (sul mio drive C), ma non se il file html è su un server e il file immagine è locale. Perché?Perché non posso fare <img src="C:/localfile.jpg">?

Eventuali soluzioni alternative?

+1

posso chiedere perché si vuole fare una cosa simile? –

+1

@BorisCallens Ad esempio, potrei voler verificare la modifica di un'immagine sul mio sito Web di staging, quando ho la nuova immagine sul mio computer e non voglio passare attraverso l'intero processo di caricamento in staging. Sembra che l'unico modo per farlo sarebbe quello di cambiare l'immagine nell'ambiente di sviluppo invece di allestire comunque. –

+0

È anche un ottimo modo per fare uno scherzo alle conoscenze meno tecnicamente competenti, facendole pensare di aver violato un sito web. – 0112

risposta

46

Sarebbe una vulnerabilità di sicurezza se il client potrebbe richiedere file di file system locali e quindi utilizzare JavaScript per capire cosa c'è dentro.

L'unico modo per aggirare questo è creare un'estensione in un browser. Le estensioni di Firefox e le estensioni IE possono accedere alle risorse locali. Chrome è molto più restrittivo.

+0

ancora, flash riesce ad accedere a tutto ciò che l'utente seleziona, anche in Chrome – Javier

+0

ha svitato questo perché ha risposto al perché e ha dato qualche modo intorno ad esso. Quello che probabilmente farò (e so che non ho fornito molto sfondo) è creare un server web locale per servire le immagini locali. In questo modo il browser può visualizzarli. – PeterV

+0

Flash può accedere solo alle risorse locali con un file di criteri in atto o altrimenti passa alla modalità locale e viene limitato in altri modi. –

13

C: non è uno schema URI riconosciuto. Prova invece a file://c|/....

24

I browser non sono autorizzati ad accedere al file system locale a meno che non si acceda a una pagina html locale. Devi caricare l'immagine da qualche parte. Se è nella stessa directory del file html, allora puoi usare <img src="localfile.jpg"/>

23

non dovresti usare "file: // C: /localfile.jpg" invece di "C: /localfile.jpg"?

+5

GRAZIE. 7 anni uno sviluppatore .Net e ho dimenticato di mettere il file: // di fronte ... –

+3

Ancora non funziona! –

2

L'osservazione di Newtang sulle norme di sicurezza a parte, come farai a sapere che chiunque visiti la tua pagina avrà le immagini corrette allo c:\localfile.jpg? Non puoi Anche se pensi di poterlo fare, non puoi. Suppone un ambiente Windows, per prima cosa.

+0

A meno che tu non sia possibile. Non ho dato molto contesto alla domanda, lo so :) Ma in questo caso possiamo effettivamente sapere. – PeterV

+5

Cosa succede se ha in programma solo di avere 10 utenti in un ufficio che hanno tutti gli ambienti Windows e le immagini corrette in c: \ localfile.jpg. A tal fine ... sarebbe completamente in grado non solo di sapere che le immagini corrette sono lì, ma anche di controllarle. – Nazca

+0

Questa domanda è valida perché il suo requisito è per un ambiente Windows, che serve un pubblico molto limitato. Per esempio, mi sono imbattuto nello stesso problema quando stavo progettando un server Web basato su Arduino in cui l'unico client era un PC Windows sulla stessa LAN del server Arduino. Arduino era troppo lento nel servire le immagini al client, quindi avevo bisogno di memorizzare le immagini sul computer client stesso. – PrashanD

0

È necessario caricare anche l'immagine, quindi collegarla all'immagine sul server.

1

Vedo due possibilità per ciò che si sta cercando di fare:

  1. Volete che il vostro sito, in esecuzione su un server, per trovare il file sul computer che è stato originariamente progettato?

  2. Vuoi prelevarlo dal pc che sta visualizzando sulla pagina?

Opzione 1 semplicemente non ha senso :)

opzione 2 sarebbe un buco di sicurezza, il browser vieta una pagina web (servito dal web) dal contenuto di carico sulla macchina dello spettatore.

Kyle Hudson ti ha detto cosa devi fare, ma è così semplice che trovo difficile credere che questo sia tutto quello che vuoi fare.

-5

Um, pensa ... ci sono miliardi di computer hanno l'unità C: \ così come ti aspetti che l'html sul server sappia il tuo C: \ localfile.jpg locale? Tutto deve essere sul server.

Sposta il file immagine sul server. È necessario rinominare il tag in < img src = "localfile.jpg" > Assicurati di inserirlo nella stessa directory in cui è comunque il documento, ti consiglio di aggiungere la directory "images" e inserire l'immagine nella directory images e scrivere come this: < img src = "images/localfile.jpg" > sul documento.

+4

Odio questo tipo di risposta che sembra affliggere SO. Sto scrivendo una sceneggiatura per automatizzare un'attività sul mio computer ONE e non sono preoccupato per i miliardi là fuori. La domanda è valida. Um, pensa un po 'di più. – DaveWalley

0

Che ne dici di avere l'immagine essere qualcosa selezionato dall'utente? Usa un input: tag di file e dopo aver selezionato l'immagine, mostralo sulla pagina web del client? È fattibile per molte cose.In questo momento sto cercando di farlo funzionare per IE, ma come per tutti i prodotti Microsoft, è un cluster fork().

3

IE 9: Se si desidera che l'utente prende in esame immagine prima che lo invia al server: L'utente deve aggiungere il sito alla "lista sito web di fiducia".

1

se si utilizza Google browser Chrome è possibile utilizzare come questo

<img src="E://bulbpro/pic_bulboff.gif" width="150px" height="200px"> 

Ma se si utilizza Firefox Mozila l'avete bisogno di aggiungere "file" ex.

<img src="file:E://bulbpro/pic_bulboff.gif" width="150px" height="200px"> 
+0

Che non ha funzionato per me in chrome, ma funziona in IE? – octopus

2

Onestamente il modo più semplice era aggiungere il file hosting al server.

  • Aprire IIS

  • Aggiungere una directory virtuale in sito Web predefinito

    • percorso virtuale sarà quello che si vuole individuare nel browser. Quindi, se si sceglie "ServerName/immagini si sarà in grado di navigare ad esso andando a http://serverName/images
    • Poi aggiungere il percorso fisico sul disco C:
  • aggiungere le autorizzazioni appropriate per la cartella C:. guidare per "SERVIZIO dI RETE" e "IIS AppPool \ DefaultAppPool"

  • Refresh sito Web predefinito

  • e il gioco è fatto È ora possibile passare a qualsiasi immagine in quella cartella navigando a http://yourServerName/whateverYourFolderNameIs/yourImage.jpg e l'uso che l'URL nella vostra src img

Spero che questo aiuti qualcuno

0

Se si sta distribuendo un sito web locale solo per te stesso o di alcuni clienti, è possibile aggirare il problema eseguendo mklink /D MyImages "C:/MyImages" nel sito directory principale come amministratore in cmd. Quindi, nel codice HTML, fare <img src="MyImages/whatever.jpg"> e il collegamento simbolico stabilito da mklink collegherà il relativo collegamento src con il collegamento sull'unità C. Ha risolto questo problema per me, quindi può aiutare gli altri a venire a questa domanda.

(Ovviamente questo non funziona per siti web pubblici dal momento che non è possibile eseguire i comandi cmd sui computer delle persone facilmente)