Bagaimana saya bisa membuat tautan ke file lokal di halaman web yang dikelola secara lokal?

155

Saya ingin memiliki file html yang mengatur file tertentu yang tersebar di seluruh hard drive saya. Misalnya, saya memiliki dua file yang akan saya tautkan:

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

Masalahnya adalah saya ingin tautan berfungsi sebagai pintasan ke file. Saya sudah mencoba yang berikut ini:

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

... tetapi tautan pertama tidak melakukan apa pun dan tautan kedua membuka file di Chrome, bukan VLC.

Pertanyaan saya adalah:

  1. Apakah ada cara untuk menyesuaikan HTML saya untuk memperlakukan tautan sebagai pintasan ke file?

  2. Jika tidak ada cara untuk menyesuaikan HTML, apakah ada cara lain untuk menautkan dengan rapi ke file yang tersebar di seluruh hard drive?

Komputer saya menjalankan Windows 7 dan browser web saya adalah Chrome.

Brian Fitzpatrick
sumber

Jawaban:

259

Anda perlu menggunakan file:///protokol (ya, itu tiga garis miring) jika Anda ingin menautkan ke file lokal.

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

Ini tidak akan pernah membuka file di aplikasi lokal Anda secara otomatis. Itu untuk alasan keamanan yang akan saya bahas di bagian terakhir. Jika terbuka, itu hanya akan terbuka di browser. Jika browser Anda dapat menampilkan file, itu akan, jika tidak, ia mungkin akan menanyakan apakah Anda ingin mengunduh file.

Versi modern dari banyak browser (mis. Firefox dan Chrome) akan menolak untuk beralih dari protokol http ke protokol file untuk mencegah perilaku jahat. Anda harus membuka halaman web Anda secara lokal menggunakan protokol file jika Anda ingin melakukan hal ini sama sekali.

Mengapa itu macet tanpa file:///?

Bagian pertama dari URL adalah protokol. Protokol adalah beberapa huruf, lalu tanda titik dua dan dua garis miring. HTTP://dan FTP://merupakan protokol yang valid; C:/tidak dan saya cukup yakin itu bahkan tidak benar-benar mirip.

C:/juga bukan alamat web yang valid. Peramban dapat menganggap itu dimaksudkan http://c/dengan port kosong yang ditentukan, tetapi itu akan gagal.

Browser Anda mungkin tidak menganggap itu merujuk ke file lokal. Ada sedikit alasan untuk membuat asumsi itu karena situs publik biasanya tidak berusaha untuk menautkan ke file lokal orang.

Jadi jika Anda ingin mengakses file lokal: katakan untuk menggunakan protokol file.

Kenapa tiga tebasan?

Karena itu bagian dari skema File URI . Anda memiliki opsi untuk menentukan host setelah dua tebasan pertama. Jika Anda melewatkan menentukan host, itu hanya akan menganggap Anda merujuk ke file di PC Anda sendiri. Ini berarti file:///C:/etcjalan pintas untuk file://localhost/C:/etc.

File-file ini masih akan terbuka di browser Anda dan itu bagus

Browser Anda akan merespons file-file ini dengan cara yang sama mereka merespons file yang sama di mana saja di internet. File-file ini tidak akan terbuka di penangan file default Anda (mis. MS Word atau VLC Media Player), dan Anda tidak akan dapat melakukan apa pun seperti meminta File Explorer untuk membuka lokasi file.

Ini adalah hal yang sangat baik untuk keamanan Anda.

Situs di browser Anda tidak dapat berinteraksi dengan sistem operasi Anda dengan sangat baik. Jika situs yang bagus dapat memberi tahu mesin Anda untuk membuka lecture.mp4 di VLC.exe , situs jahat dapat memerintahkannya untuk membuka virus.bat di CMD.exe . Atau bisa juga memberitahu mesin Anda untuk menjalankan beberapa file Uninstall.exe atau membuka File Explorer jutaan kali.

Ini mungkin tidak nyaman bagi Anda, tetapi keamanan HTML dan browser tidak benar-benar dirancang untuk apa yang Anda lakukan. Jika Anda ingin dapat membuka lecture.mp4 di VLC.exe, pertimbangkan untuk menulis aplikasi desktop.

doppelgreener
sumber
1
Terima kasih Jonathan. Apakah Anda tahu jika ada cara untuk "menampilkan file di folder" sebagai alternatif?
Brian Fitzpatrick
7
@Brian Browser Anda tidak dapat berinteraksi dengan OS Anda dengan cara itu, dan Anda harusnya sangat senang tidak bisa.
doppelgreener
23
Sepertinya Chrome tidak akan mengunduh file lokal menggunakan file: /// protokol (memberi Anda Not allowed to load local resourcekesalahan)
Loupax
1
Saya ingin memberikan tautan seperti "file: /// .. \ .. \ sort.mw" sehingga akan mengembalikan dua folder dan mendapatkan file di sana. Karena kami menggunakan file kata di dropbox. Jadi adakah solusi.
Murtaza Munshi
5
Mungkin juga layak disebutkan bahwa Anda tidak dapat menautkan dari situs web (mis. Server dev lokal) ke file lokal. forums.mozillazine.org/viewtopic.php?f=9&t=1730
Nuala
14

Jika Anda menjalankan IIS pada PC Anda, Anda dapat menambahkan direktori yang ingin Anda jangkau sebagai Direktori Virtual. Untuk melakukan ini, Anda klik kanan pada Situs Anda di ISS dan tekan "Tambahkan Direktori Virtual". Beri nama folder virtual. Arahkan folder virtual ke lokasi folder Anda di PC lokal Anda. Anda juga harus memberikan kredensial yang memiliki hak istimewa untuk mengakses folder spesifik misalnya. HOSTNAME \ nama pengguna dan kata sandi. Setelah itu Anda dapat mengakses file di folder virtual seperti file lain di situs Anda.

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

Omong-omong, ini juga berfungsi dengan Chrome yang jika tidak menerima file-file protokol: //

Semoga ini bisa membantu seseorang :)

pengguna3507261
sumber
Terima kasih atas jawabannya! Saya telah meletakkan file: /// sebelum path ke file namun ketika saya mengkliknya tidak ada yang terjadi. Saya harus membukanya dengan Ctrl (di tab baru). Kenapa gitu?
Piotr Czyż
5

Janky paling-paling

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

lalu klik kanan, pilih opsi "salin lokasi", lalu tempelkan ke url.

Chet Meinzer
sumber
apakah kita dipaksa untuk mengklik kanan? apakah ada cara untuk hanya mengklik kiri di atasnya?
Bandoleras
1

kembali ke 2017:

gunakan URL.createObjectURL (file) untuk membuat tautan lokal ke sistem file yang dipilih pengguna;

jangan lupa membebaskan memori dengan menggunakan URL.revokeObjectURL ()

pery mimon
sumber
Argumen file di sini memerlukan objek file aktual yang dibangun di dalam runtime JS klien browser, artinya kita harus sudah mengunggahnya ke klien browser (misalnya melalui kontrol formulir unggah file). URL yang dihasilkan adalah URL gumpalan untuk mengunduh atau merujuk salinan yang disimpan dalam memori di dalam runtime JS klien browser. Itu tidak akan membantu dalam membuat tautan ke file lokal; itu adalah tautan ke salinan yang disimpan dalam memori (yang sebaliknya tidak akan berlaku berbeda setelah kami mencoba mengaksesnya)
doppelgreener
Apa yang saya butuhkan. Gunakan Input File untuk memilih file, lalu buka di tab menggunakan createObjectURL.
Tony Lugg
0

Saya punya cara dan bekerja seperti ini:

<'a href="FOLDER_PATH" target="_explorer.exe">Link Text<'/a>
Maciej
sumber
Itu tidak terlihat seperti nilai target yang valid, bahkan di Internet Explorer .
doppelgreener
IE mengabaikan target (tidak valid) (di atas). Berikut ini berfungsi dengan baik dengan IE10, 11: <a href="C:/tmp"> Tautan ke tmp pada drive C. </a>
primehunter
Ini berfungsi baik untuk saya, menggunakan IE dan jalur drive jaringan seperti 'file: // servername / path \ to \ folder' sebagai pengganti FOLDER_PATH. Jika Anda menghilangkan 'target = "_ explorer.exe"' folder terbuka di IE dan bukannya explorer.exe dan sepertinya mirip explorer.
JonP