Jak mogę utworzyć łącze do pliku lokalnego na lokalnie uruchamianej stronie internetowej?

155

Chciałbym mieć plik HTML, który organizuje określone pliki rozproszone po całym dysku twardym. Na przykład mam dwa pliki, do których podałbym link:

  • C:\Programs\sort.mw
  • C:\Videos\lecture.mp4

Problem w tym, że chciałbym, aby linki funkcjonowały jako skrót do pliku. Wypróbowałem następujące:

<a href="C:\Programs\sort.mw">Link 1</a>
<a href="C:\Videos\lecture.mp4">Link 2</a>

... ale pierwszy link nic nie robi, a drugi link otwiera plik w Chrome, a nie VLC.

Moje pytania to:

  1. Czy istnieje sposób na dostosowanie mojego kodu HTML, aby traktował łącza jako skróty do plików?

  2. Jeśli nie ma sposobu na dostosowanie kodu HTML, czy są jakieś inne sposoby na zgrabne łącze do plików rozrzuconych na dysku twardym?

Na moim komputerze działa system Windows 7, a moja przeglądarka internetowa to Chrome.

Brian Fitzpatrick
źródło

Odpowiedzi:

259

Musisz użyć file:///protokołu (tak, to trzy ukośniki), jeśli chcesz połączyć się z plikami lokalnymi.

<a href="file:///C:\Programs\sort.mw">Link 1</a>
<a href="file:///C:\Videos\lecture.mp4">Link 2</a>

Nigdy nie otworzą one automatycznie pliku w aplikacjach lokalnych. To ze względów bezpieczeństwa, które omówię w ostatniej sekcji. Jeśli się otworzy, otworzy się tylko w przeglądarce. Jeśli Twoja przeglądarka może wyświetlić plik, to zrobi, w przeciwnym razie prawdopodobnie zapyta Cię, czy chcesz pobrać plik.

Nowoczesne wersje wielu przeglądarek (np. Firefox i Chrome) odmawiają przechodzenia z protokołu http na protokół pliku, aby zapobiec złośliwemu zachowaniu. Jeśli chcesz w ogóle to zrobić, musisz otworzyć swoją stronę internetową lokalnie, korzystając z protokołu plików.

Dlaczego utknęła bez file:///?

Pierwsza część adresu URL to protokół. Protokół składa się z kilku liter, następnie dwukropka i dwóch ukośników. HTTP://i FTP://są ważnymi protokołami; C:/nie jest i jestem pewien, że nawet właściwie nie przypomina jednego.

C:/również nie jest prawidłowym adresem internetowym. Przeglądarka może założyć, że ma mieć http://c/określony pusty port, ale to się nie powiedzie.

Twoja przeglądarka może nie zakładać, że odwołuje się do pliku lokalnego. Nie ma powodu, aby przyjmować takie założenie, ponieważ witryny publiczne zwykle nie próbują tworzyć linków do lokalnych plików ludzi.

Więc jeśli chcesz uzyskać dostęp do plików lokalnych: powiedz mu, aby używał protokołu plików.

Dlaczego trzy cięcia?

Ponieważ jest to część schematu identyfikatora URI pliku . Masz możliwość określenia hosta po pierwszych dwóch ukośnikach. Jeśli pominiesz określanie hosta, po prostu założysz, że odnosisz się do pliku na własnym komputerze. Oznacza to, że file:///C:/etcjest to skrót do file://localhost/C:/etc.

Te pliki będą nadal otwierane w Twojej przeglądarce i to dobrze

Twoja przeglądarka zareaguje na te pliki w taki sam sposób, w jaki zareagowałaby na ten sam plik w dowolnym miejscu w Internecie. Te pliki nie otworzą się w twoim domyślnym programie obsługi plików (np. MS Word lub VLC Media Player) i nie będziesz mógł zrobić nic takiego, jak poproszenie Eksploratora plików o otwarcie lokalizacji pliku.

To bardzo dobra rzecz dla twojego bezpieczeństwa.

Witryny w przeglądarce nie mogą dobrze współdziałać z systemem operacyjnym. Jeśli dobra witryna może nakazać komputerowi otwarcie pliku lecture.mp4 w pliku VLC.exe , złośliwa witryna może nakazać jej otwarcie pliku virus.bat w CMD.exe . Lub może po prostu powiedzieć twojemu komputerowi, aby uruchomił kilka plików Uninstall.exe lub otworzył Eksplorator plików milion razy.

Może to nie być dla Ciebie wygodne, ale zabezpieczenia HTML i przeglądarki nie zostały tak naprawdę zaprojektowane do tego, co robisz. Jeśli chcesz mieć możliwość otwierania lecture.mp4 w VLC.exe, rozważ zamiast tego napisanie aplikacji komputerowej.

doppelgreener
źródło
1
Dzięki Jonathan. Czy wiesz, czy istnieje sposób, aby „pokazać plik w folderze” jako alternatywę?
Brian Fitzpatrick
7
@Brian Twoja przeglądarka nie może wchodzić w interakcję z systemem operacyjnym w ten sposób i powinieneś być bardzo zadowolony, że nie może.
doppelgreener
23
Wygląda na to, że Chrome i tak nie pobierze plików lokalnych przy użyciu protokołu file: /// (co powoduje Not allowed to load local resourcebłąd)
Loupax
1
Chcę podać link taki jak ten „plik: /// .. \ .. \ sort.mw”, aby wrócił do dwóch folderów i tam pobierał plik. Ponieważ używamy pliku Word w Dropbox. Więc jest jakieś rozwiązanie.
Murtaza Munshi
5
Warto również wspomnieć, że nie możesz linkować ze strony internetowej (np. Lokalnego serwera deweloperskiego) do pliku lokalnego. forums.mozillazine.org/viewtopic.php?f=9&t=1730
Nuala
14

Jeśli korzystasz z usług IIS na swoim komputerze, możesz dodać katalog, do którego próbujesz się dostać, jako katalog wirtualny. Aby to zrobić, kliknij prawym przyciskiem myszy swoją witrynę w ISS i naciśnij „Dodaj katalog wirtualny”. Nazwij folder wirtualny. Wskaż folder wirtualny na lokalizację folderu na lokalnym komputerze. Musisz również podać poświadczenia, które mają uprawnienia dostępu do określonego folderu, np. NAZWA HOSTA \ nazwa użytkownika i hasło. Następnie możesz uzyskać dostęp do pliku w folderze wirtualnym, tak jak do każdego innego pliku w witrynie.

http://sitename.com/virtual_folder_name/filename.fileextension

Nawiasem mówiąc, działa to również z Chrome, który w przeciwnym razie nie akceptuje pliku protokołu pliku: //

Mam nadzieję, że to komuś pomoże :)

user3507261
źródło
Dziękuję za odpowiedź! Wstawiłem file: /// przed ścieżką do pliku, jednak po kliknięciu nic się nie dzieje. Muszę go otworzyć za pomocą Ctrl (w nowej karcie). Dlaczego tak się dzieje?
Piotr Czyż
5

W najlepszym razie Janky

<a href="file://///server/folders/x/x/filename.ext">right click </a></td>

a następnie kliknij prawym przyciskiem myszy, wybierz opcję „kopiuj lokalizację”, a następnie wklej do adresu URL.

Chet Meinzer
źródło
czy jesteśmy zmuszeni do kliknięcia prawym przyciskiem myszy? czy istnieje sposób na kliknięcie go lewym przyciskiem myszy?
Bandoleras
1

powrót do 2017 roku:

użyj adresu URL.createObjectURL (plik), aby utworzyć lokalne łącze do systemu plików wybranego przez użytkownika;

nie zapomnij zwolnić pamięci za pomocą URL.revokeObjectURL ()

pery mimon
źródło
Argument plik tutaj wymaga rzeczywistego obiektu pliku skonstruowanego w środowisku wykonawczym JS klienta przeglądarki, co oznacza, że ​​musielibyśmy już przesłać go do klienta przeglądarki (na przykład za pomocą kontrolki formularza przesyłania pliku). Wygenerowany adres URL to adres URL obiektu blob do pobierania lub odwoływania się do kopii przechowywanej w pamięci w środowisku wykonawczym JS klienta przeglądarki. To nie pomoże w tworzeniu łącza do pliku lokalnego; jest to łącze do kopii przechowywanej w pamięci (która w przeciwnym razie nie będzie się zachowywać inaczej, gdy spróbujemy uzyskać do niej dostęp).
doppelgreener
Dokładnie to, czego potrzebowałem. Użyj wejścia pliku, aby wybrać plik, a następnie otwórz go na karcie przy użyciu funkcji createObjectURL.
Tony Lugg
0

Mam sposób i działa tak:

<'a href="FOLDER_PATH" target="_explorer.exe">Link Text<'/a>
Maciej
źródło
To nie wygląda na prawidłową wartość docelową, nawet w przeglądarce Internet Explorer .
doppelgreener
IE ignoruje (nieprawidłowy) cel (powyżej). Następujące działa dobrze z IE10, 11: <a href="C:/tmp"> Link do tmp na dysku C. </a>
primehunter
U mnie działa dobrze, używając IE i ścieżki dysku sieciowego, takiej jak „plik: // nazwa_serwera / ścieżka \ do \ folderu” zamiast FOLDER_PATH. Jeśli pominiesz 'target = "_ explorer.exe"', folder otworzy się w IE zamiast w explorer.exe i wygląda prawie jak explorer.
JonP