Yerel olarak çalıştırılan bir web sayfasında yerel bir dosyaya nasıl bağlantı oluşturabilirim?


155

Sabit diskime dağılmış belirli dosyaları düzenleyen bir html dosyasına sahip olmak istiyorum. Örneğin, bağlantı vereceğim iki dosya var:

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

Sorun, bağlantıların dosyaya bir kısayol olarak işlev görmesini istiyorum. Aşağıdakileri denedim:

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

... ancak ilk bağlantı hiçbir şey yapmaz ve ikinci bağlantı dosyayı VLC'de değil Chrome'da açar.

Sorularım:

  1. Bağlantıları dosyalara kısayol olarak ele almak için HTML kodumu ayarlamanın bir yolu var mı?

  2. HTML'yi ayarlamanın bir yolu yoksa, sabit sürücüye dağılmış dosyalara düzgün bir şekilde bağlantı kurmanın başka yolları var mı?

Bilgisayarım Windows 7 çalıştırıyor ve web tarayıcım Chrome.

Yanıtlar:


259

file:///Yerel dosyalara bağlantı oluşturmak için protokolü kullanmanız gerekir (evet, bu üç eğik çizgi).

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

Bunlar dosyayı hiçbir zaman yerel uygulamalarınızda otomatik olarak açmaz. Bu, son bölümde ele alacağım güvenlik nedenlerinden dolayı. Açılırsa, yalnızca tarayıcıda açılır. Tarayıcınız dosyayı görüntüleyebiliyorsa, aksi takdirde dosyayı indirmek isteyip istemediğiniz sorulur.

Birçok tarayıcının modern sürümleri (ör. Firefox ve Chrome), kötü niyetli davranışları önlemek için http protokolünden dosya protokolüne geçmeyi reddedecektir. Bu işlemleri yapmak istiyorsanız, dosya protokolünü kullanarak web sayfanızı yerel olarak açmanız gerekir.

Neden olmadan takılıyor file:///?

Bir URL'nin ilk kısmı protokoldür. Bir protokol birkaç harf, sonra iki nokta üst üste ve iki eğik çizgi. HTTP://ve FTP://geçerli protokollerdir; C:/değil ve eminim ki düzgün bir şekilde benzemiyor bile.

C:/ayrıca geçerli bir web adresi değil. Tarayıcı, http://c/boş bir bağlantı noktası belirtilmiş olması gerektiğini varsayabilir , ancak bu başarısız olur.

Tarayıcınız yerel bir dosyaya atıfta bulunduğunu varsaymayabilir. Halka açık siteler genellikle insanların yerel dosyalarına bağlanmaya çalışmadığından bu varsayımı yapmak için çok az neden vardır.

Yerel dosyalara erişmek istiyorsanız: dosya protokolünü kullanmasını söyleyin.

Neden üç eğik çizgi?

Çünkü Dosya URI şemasının bir parçası . İlk iki eğik çizgiden sonra bir ana bilgisayar belirleme seçeneğiniz vardır. Bir ana bilgisayar belirtmeyi atlarsanız, kendi PC'nizdeki bir dosyaya başvurduğunuzu varsayar. Bu, file:///C:/etciçin bir kısayoldur file://localhost/C:/etc.

Bu dosyalar tarayıcınızda hala açılacak ve bu iyi

Tarayıcınız bu dosyalara, İnternet'te herhangi bir yerde aynı dosyaya yanıt verecekleri şekilde yanıt verecektir. Bu dosyalar olmaz varsayılan dosya işleyicisi (örn MS Word veya VLC Media Player) açın ve olmayacak Dosya Gezgini dosyanın konumunu açmak için sor böyle bir şey yapabilmek.

Bu güvenliğiniz için son derece iyi bir şey.

Tarayıcınızdaki siteler işletim sisteminizle çok iyi etkileşime giremiyor. İyi bir site açık makinenizi söylesem lecture.mp4 içinde vlc.exe , bir kötü niyetli site açık bunu söyleyebilirdi virus.bat içinde cmd.exe . Veya makinenize birkaç Uninstall.exe dosyasını çalıştırmasını veya milyonlarca kez Dosya Gezgini'ni açmasını söyleyebilir .

Bu sizin için uygun olmayabilir, ancak HTML ve tarayıcı güvenliği yaptığınız şey için gerçekten tasarlanmamıştır. Eğer açık edebilmek istiyorsanız lecture.mp4 içinde vlc.exe yerine bir masaüstü uygulaması yazmayı düşünün.


1
Teşekkürler Jonathan. Alternatif olarak "dosyayı klasörde göster" seçeneğinin olup olmadığını biliyor musunuz?
Brian Fitzpatrick

7
@Brian Tarayıcınız işletim sisteminizle bu şekilde etkileşime giremez ve yapamayacağından son derece memnun olmalısınız.
doppelgreener

23
Görünüşe göre Chrome zaten /// protokolü dosyasını kullanarak yerel dosyaları indirmeyecek (size bir Not allowed to load local resourcehata veriyor )
Loupax

1
Ben böyle bir dosya vermek istiyorum "dosya: /// .. \ .. \ sort.mw" iki klasör geri gider ve orada dosyayı alır. Çünkü word dosyasını dropbox'ta kullanıyoruz. Yani herhangi bir çözüm var.
Murtaza Munshi

5
Ayrıca bir web sitesinden (örn. Yerel geliştirici sunucusu) yerel bir dosyaya bağlanamayacağınızı da belirtmek gerekebilir. forums.mozillazine.org/viewtopic.php?f=9&t=1730
nuala

14

Bilgisayarınızda IIS çalıştırıyorsanız, Sanal Dizin olarak ulaşmaya çalıştığınız dizini ekleyebilirsiniz. Bunu yapmak için ISS'de Sitenizi sağ tıklayın ve "Sanal Dizin Ekle" ye basın. Sanal klasörü adlandırın. Sanal klasörü yerel bilgisayarınızdaki klasör konumunuza yönlendirin. Ayrıca, belirli bir klasöre erişmek için ayrıcalıklara sahip kimlik bilgilerini sağlamanız gerekir. HOSTNAME \ kullanıcı adı ve şifre. Bundan sonra sanal klasördeki dosyaya sitenizdeki herhangi bir dosya olarak erişebilirsiniz.

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

Bu arada, aksi takdirde dosya protokolü dosyasını kabul etmeyen Chrome ile de çalışır: //

Umarım bu birine yardımcı olur :)


Cevap için teşekkürler! Ben bir dosya yolundan önce file: /// koydu ancak üzerine tıkladığımda hiçbir şey olmaz. Ctrl ile açmak zorundayım (yeni sekmede). Neden böyle?
Piotr Czyż

5

Janky en iyi

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

ve sağ tıklayın, "konumu kopyala" seçeneğini seçin ve sonra url'ye yapıştırın.


sağ tıklamaya mı zorlandık? sol tıklamanın bir yolu var mı?
Bandoleras

1

2017'ye dönelim:

kullanıcının seçtiği dosya sistemine yerel bağlantı oluşturmak için URL.createObjectURL (dosya) kullanın;

URL.revokeObjectURL () kullanarak belleği boşaltmayı unutma


Buradaki dosya bağımsız değişkeni, tarayıcı istemcisinin JS çalışma zamanının içinde oluşturulmuş gerçek bir dosya nesnesi gerektirir, yani onu tarayıcı istemcisine zaten yüklememiz gerekirdi (örneğin, bir dosya yükleme formu denetimi aracılığıyla). Oluşturulan URL, tarayıcı istemcisinin JS çalışma zamanındaki bellekte depolanan kopyayı indirmek veya referans vermek için bir blob URL'sidir. Bu, yerel bir dosyaya bağlantı oluşturmaya yardımcı olmaz; bellekte depolanan bir kopyanın bağlantısıdır (erişmeye çalıştığımızda başka türlü davranmayacaktır).
doppelgreener

Tam olarak ihtiyacım olan şey. Bir dosya seçmek için Dosya Girişi'ni kullanın, ardından createObjectURL kullanarak bir sekmede açın.
Tony Lugg

0

Bir yolum var ve böyle çalışıyorum:

<'a href="FOLDER_PATH" target="_explorer.exe">Link Text<'/a>

Bu, Internet Explorer'da bile geçerli bir hedef değere benzemiyor .
doppelgreener

IE (geçersiz) hedefi yok sayar (yukarıda). Aşağıdakiler IE10, 11 ile iyi çalışır: <a href="C:/tmp"> C sürücüsünde tmp bağlantısı </a>
primehunter

IE ve FOLDER_PATH yerine 'file: // sunucuadı / path \ to \ folder' gibi bir ağ sürücüsü yolu kullanarak benim için iyi çalışıyor. 'Target = "_ explorer.exe"' dosyasını atlarsanız, klasör explorer.exe yerine IE'de açılır ve explorer'a çok benzer.
JonP
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.