Działa, jeśli plik html jest lokalny (na moim dysku C), ale nie, jeśli plik html znajduje się na serwerze, a plik obrazu jest lokalny. Dlaczego?
Jakieś możliwe obejścia?
javascript
html
filesystems
src
PeterV
źródło
źródło
src=""
Odpowiedzi:
Byłaby to luka w zabezpieczeniach, gdyby klient mógł zażądać plików lokalnego systemu plików, a następnie użyć JavaScript, aby dowiedzieć się, co się w nich znajduje.
Jedynym sposobem obejścia tego jest utworzenie rozszerzenia w przeglądarce. Rozszerzenia przeglądarki Firefox i rozszerzenia IE mogą uzyskiwać dostęp do zasobów lokalnych. Chrome jest znacznie bardziej restrykcyjny.
źródło
czy nie należy używać „file: // C: /localfile.jpg” zamiast „C: /localfile.jpg”?
źródło
Przeglądarki nie mogą uzyskać dostępu do lokalnego systemu plików, chyba że uzyskujesz dostęp do lokalnej strony HTML. Musisz gdzieś przesłać obraz. Jeśli znajduje się w tym samym katalogu co plik html, możesz użyć
<img src="localfile.jpg"/>
źródło
C:
nie jest rozpoznanym schematem URI. Spróbujfile://c|/...
zamiast tego.źródło
Szczerze mówiąc, najłatwiejszym sposobem było dodanie hostingu plików do serwera.
Otwórz IIS
Dodaj katalog wirtualny w domyślnej witrynie sieci Web
Dodaj odpowiednie uprawnienia do folderu na dysku C: dla „NETWORK SERVICE” i „IIS AppPool \ DefaultAppPool”
Odśwież domyślną witrynę sieci Web
I jesteś skończony. Możesz teraz przejść do dowolnego obrazu w tym folderze, przechodząc do http: //yourServerName/cokolwiekYourFolderNameIs/yourImage.jpg i użyć tego adresu URL w swoim img src
Mam nadzieję, że to komuś pomoże
źródło
IE 9: Jeśli chcesz, aby użytkownik obejrzał obraz przed wysłaniem go na serwer: Użytkownik powinien DODAĆ witrynę do „listy zaufanych witryn internetowych”.
źródło
możemy użyć funkcji FileReader () javascript i jego funkcji readAsDataURL (fileContent), aby wyświetlić plik lokalnego dysku / folderu. Powiąż zdarzenie zmiany z obrazem, a następnie wywołaj funkcję showpreview języka JavaScript. Spróbuj tego -
źródło
Pomijając obserwację Newtanga dotyczącą zasad bezpieczeństwa, skąd masz wiedzieć, że każdy, kto przegląda twoją stronę, będzie miał prawidłowe obrazy
c:\localfile.jpg
? Nie możesz. Nawet jeśli myślisz, że możesz, nie możesz. Po pierwsze, zakłada środowisko Windows.źródło
Widzę dwie możliwości tego, co próbujesz zrobić:
Chcesz, aby Twoja strona internetowa działająca na serwerze znajdowała plik na komputerze, na którym została zaprojektowana?
Chcesz, żeby pobierał go z komputera, który przegląda stronę?
Opcja 1 po prostu nie ma sensu :)
Opcja 2 byłaby luką w zabezpieczeniach, przeglądarka uniemożliwia stronie internetowej (obsługiwanej z sieci) ładowanie treści na komputer przeglądarki.
Kyle Hudson powiedział ci, co musisz zrobić, ale to jest tak podstawowe, że trudno mi uwierzyć, że to wszystko, co chcesz zrobić.
źródło
jeśli używasz przeglądarki Google Chrome, możesz używać w ten sposób
<img src="E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
Ale jeśli używasz przeglądarki Mozila Firefox, musisz dodać „plik” np.
<img src="file:E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
źródło
Jeśli wdrażasz lokalną witrynę internetową tylko dla siebie lub niektórych klientów, możesz obejść ten problem, uruchamiając
mklink /D MyImages "C:/MyImages"
w katalogu głównym witryny jako administrator w cmd. Następnie w html, wykonaj,<img src="MyImages/whatever.jpg">
a dowiązanie symboliczne utworzone przez mklink połączy relatywne łącze src z łączem na dysku C. Rozwiązał ten problem dla mnie, więc może pomóc innym, którzy przyjdą na to pytanie.(Oczywiście to nie zadziała w przypadku publicznych witryn internetowych, ponieważ nie można łatwo uruchamiać poleceń cmd na komputerach ludzi)
źródło
Wypróbowałem wiele technik i ostatecznie znalazłem jedną po stronie C # i stronie JS. Nie możesz podać fizycznej ścieżki do atrybutu src, ale możesz podać ciąg base64 jako src do tagu Img. Spójrzmy na poniższy przykład kodu C #.
<asp:Image ID="imgEvid" src="#" runat="server" Height="99px"/>
Kod 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); }
Mam nadzieję, że to pomoże
źródło
Musisz również przesłać obraz, a następnie link do obrazu na serwerze.
źródło
co z tym, aby obraz był czymś wybranym przez użytkownika? Użyć znacznika input: file, a po wybraniu obrazu pokazać go na stronie klienta? Jest to wykonalne w przypadku większości rzeczy. W tej chwili próbuję sprawić, by działał w IE, ale tak jak w przypadku wszystkich produktów firmy Microsoft jest to fork ().
źródło
zaczyna się
file:///
i kończy nafilename
powinno działać:<img src="file:///C:/Users/91860/Desktop/snow.jpg" alt="Snow" style="width:100%;">
źródło