Como posso criar um link para um arquivo local em uma página da Web executada localmente?

155

Eu gostaria de ter um arquivo html que organize certos arquivos espalhados por todo o meu disco rígido. Por exemplo, tenho dois arquivos aos quais gostaria de vincular:

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

O problema é que eu gostaria que os links funcionassem como um atalho para o arquivo. Eu tentei o seguinte:

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

... mas o primeiro link não faz nada e o segundo link abre o arquivo no Chrome, não no VLC.

Minhas perguntas são:

  1. Existe uma maneira de ajustar meu HTML para tratar os links como atalhos para os arquivos?

  2. Se não houver uma maneira de ajustar o HTML, existem outras maneiras de vincular perfeitamente os arquivos espalhados pelo disco rígido?

Meu computador executa o Windows 7 e meu navegador é o Chrome.

Brian Fitzpatrick
fonte

Respostas:

259

Você precisa usar o file:///protocolo (sim, são três barras) se desejar vincular a arquivos locais.

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

Eles nunca abrirão o arquivo em seus aplicativos locais automaticamente. É por razões de segurança que abordarei na última seção. Se abrir, será aberto apenas no navegador. Se o seu navegador puder exibir o arquivo, ele será exibido; caso contrário, provavelmente perguntará se você deseja fazer o download do arquivo.

As versões modernas de muitos navegadores (por exemplo, Firefox e Chrome) se recusam a passar do protocolo http para o protocolo de arquivo para evitar comportamentos maliciosos. Você precisará abrir sua página da Web localmente usando o protocolo de arquivo, se desejar fazer essas coisas.

Por que fica preso sem file:///?

A primeira parte de uma URL é o protocolo. Um protocolo são algumas letras, depois dois pontos e duas barras. HTTP://e FTP://são protocolos válidos; C:/não é e tenho certeza de que nem sequer se parece com um.

C:/também não é um endereço da web válido. O navegador pode assumir que deve estar http://c/com uma porta em branco especificada, mas isso falhará.

Seu navegador pode não assumir que está se referindo a um arquivo local. Há poucas razões para fazer essa suposição, porque sites públicos geralmente não tentam vincular-se aos arquivos locais das pessoas.

Portanto, se você deseja acessar arquivos locais: diga para usar o protocolo de arquivos.

Por que três barras?

Porque faz parte do esquema de URI do arquivo . Você tem a opção de especificar um host após as duas primeiras barras. Se você pular a especificação de um host, apenas assumirá que você está se referindo a um arquivo em seu próprio PC. Isso significa que file:///C:/etcé um atalho para file://localhost/C:/etc.

Esses arquivos ainda serão abertos no seu navegador e isso é bom

Seu navegador responderá a esses arquivos da mesma maneira que eles responderiam ao mesmo arquivo em qualquer lugar da Internet. Esses arquivos não serão abertos no seu manipulador de arquivos padrão (por exemplo, MS Word ou VLC Media Player), e você não poderá fazer nada como pedir ao File Explorer para abrir o local do arquivo.

Isso é extremamente bom para sua segurança.

Os sites do seu navegador não podem interagir muito bem com o seu sistema operacional. Se um site bom poderia dizer a sua máquina para abrir lecture.mp4 em VLC.exe , um site malicioso poderia dizer o mesmo para abrir virus.bat em CMD.exe . Ou pode apenas dizer à sua máquina para executar alguns arquivos Uninstall.exe ou abrir o File Explorer um milhão de vezes.

Isso pode não ser conveniente para você, mas a segurança do HTML e do navegador não foi realmente projetada para o que você está fazendo. Se você quer ser capaz de abrir lecture.mp4 em VLC.exe considerar escrever um aplicativo de desktop em vez.

doppelgreener
fonte
1
Obrigado Jonathan. Você sabe se existe uma maneira de "mostrar arquivo na pasta" como alternativa?
Brian Fitzpatrick
7
@Brian Seu navegador não pode interagir com seu sistema operacional dessa maneira e você deve estar extremamente feliz por não poder.
Doppelgreener
23
Parece que o Chrome não irá baixar arquivos locais usando o file: /// protocolo de qualquer maneira (o que lhe dá um Not allowed to load local resourceerro)
Loupax
1
Eu quero dar um link como este "arquivo: /// .. \ .. \ sort.mw" para que ele volte duas pastas e obtenha o arquivo lá. Porque estamos usando o arquivo word no dropbox. Então, existe alguma solução.
Murtaza Munshi
5
Também vale a pena mencionar que você não pode criar um link de um site (por exemplo, servidor de desenvolvimento local) para um arquivo local. forums.mozillazine.org/viewtopic.php?f=9&t=1730
nuala
14

Se você estiver executando o IIS no seu PC, poderá adicionar o diretório que você está tentando acessar como um diretório virtual. Para fazer isso, clique com o botão direito do mouse no seu site no ISS e pressione "Adicionar diretório virtual". Nome da pasta virtual. Aponte a pasta virtual para o local da pasta no seu PC local. Você também precisa fornecer credenciais com privilégios para acessar a pasta específica, por exemplo. HOSTNAME \ nome de usuário e senha. Depois disso, você pode acessar o arquivo na pasta virtual como qualquer outro arquivo no seu site.

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

A propósito, isso também funciona com o Chrome que, de outra forma, não aceita o arquivo de protocolo de arquivo: //

Espero que isso ajude alguém :)

user3507261
fonte
Obrigado pela resposta! Eu coloquei file: /// antes de um caminho para um arquivo, no entanto, quando clico nele, não acontece nada. Eu tenho que abri-lo com Ctrl (na nova guia). Por que é tão?
Piotr Czyż
5

Janky na melhor das hipóteses

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

clique com o botão direito do mouse, selecione a opção "copiar local" e cole no URL.

Chet Meinzer
fonte
somos forçados a clicar com o botão direito? existe uma maneira de apenas clicar com o botão esquerdo?
Bandoleras
1

de volta a 2017:

use URL.createObjectURL (arquivo) para criar um link local para o sistema de arquivos selecionado pelo usuário;

não se esqueça de liberar memória usando URL.revokeObjectURL ()

pery mimon
fonte
O argumento file aqui requer um objeto de arquivo real construído dentro do tempo de execução JS do cliente do navegador, o que significa que já teríamos feito o upload para o cliente do navegador (por exemplo, por meio de um controle de formulário de upload de arquivo). A URL gerada é uma URL de blob para fazer o download ou fazer referência a essa cópia armazenada na memória dentro do tempo de execução JS do cliente do navegador. Isso não vai ajudar na criação de um link para um arquivo local; é um link para uma cópia armazenada na memória (que não se comportará de maneira diferente quando tentarmos acessá-la).
doppelgreener
Exatamente o que eu precisava. Use Entrada de arquivo para selecionar um arquivo e abra-o em uma guia usando createObjectURL.
Tony Lugg
0

Eu tenho uma maneira e trabalho assim:

<'a href="FOLDER_PATH" target="_explorer.exe">Link Text<'/a>
Maciej
fonte
Isso não parece um valor de destino válido, mesmo no Internet Explorer .
Doppelgreener 13/10
O IE ignora o alvo (inválido) (acima). A seguir, funciona bem com o IE10, 11: <a href="C:/tmp"> Link para tmp na unidade C. </a>
primehunter 9/11/16
Funcionou bem para mim, usando o IE e um caminho de unidade de rede como 'file: // servername / path \ to \ folder' no lugar de FOLDER_PATH. Se você omitir 'target = "_ explorer.exe"', a pasta é aberta no IE, em vez de explorer.exe, e ela se parece muito com o explorer.
JonP