Como vincular a qualquer arquivo local com sintaxe markdown?

89

Eu tenho um arquivo markdown local contendo vários links e quero que os links direcionem para um arquivo local como o pdf.

Eu uso a seguinte sintaxe:

[my link](file:///C:/my_file.pdf)

Mas quando abro meu arquivo markdown em uma página do Firefox e clico no link, nada acontece.

O que exatamente eu perdi? É possível abrir arquivo local?

Alexis Le Provost
fonte
Também respondida aqui, parece ser uma pergunta duplicada ?: stackoverflow.com/a/58317580/5890679
Akul Aggarwal
O Vim destaca o markdown de forma adequada, incluindo links da web clicáveis. Os links locais , embora destacados, não serão abertos.
user2023370

Respostas:

32

Como você está abrindo o Markdown renderizado?

Se você hospedá-lo em HTTP, ou seja, acessá-lo via http://ou https://, a maioria dos navegadores modernos se recusará a abrir links locais, por exemplo, com file://. Este é um recurso de segurança :

Para fins de segurança, os aplicativos Mozilla bloqueiam links para arquivos locais (e diretórios) de arquivos remotos. Isso inclui links para arquivos em seu disco rígido, em unidades de rede mapeadas e acessíveis através de caminhos de convenção de nomenclatura uniforme (UNC). Isso evita uma série de possibilidades desagradáveis, incluindo:

  • Permitir que os sites detectem seu sistema operacional verificando os caminhos de instalação padrão
  • Permitir que sites explorem vulnerabilidades do sistema (por exemplo, C:\con\conno Windows 95/98)
  • Permitir que os sites detectem as preferências do navegador ou leiam dados confidenciais

Existem algumas soluções alternativas listadas nessa página, mas minha recomendação é evitar fazer isso, se possível.

Chris
fonte
1
Como eu disse, abro meu arquivo markdown com o Mozilla Firefox 40.0.3 com o plug-in 'Markdown Viewer'.
Alexis Le Provost
Ah, você não mencionou esse plug-in antes ;-) Eu tentei com a exportação de HTML (o que presumi que significa "página do Firefox") do MarkdownPad. Verifique os canais de ajuda / suporte do plug-in.
Katrin Leinweber de
80

Nenhuma das respostas funcionou para mim. Mas, inspirado na resposta de BarryPye, descobri que funciona ao usar caminhos relativos!

# Contents from the '/media/user/README_1.md' markdown file:

Read more [here](./README_2.md) # It works!
Read more [here](file:///media/user/README_2.md) # Doesn't work
Read more [here](/media/user/README_2.md) # Doesn't work
BringBackCommodore64
fonte
1
Começar um caminho de url com "./" implica procurar no diretório local, enquanto começar com "/" significa "procurar no diretório base". Esta é uma convenção amplamente difundida do Linux. Eu suspeito que talvez você não tenha baixado o diretório de base completo.
HoldOffHunger
5
Como isso difere da resposta de @BarryPye?
StephenBoesch
@javadba O ponto de exclamação (!) na resposta de BarryPye renderiza o arquivo como uma imagem. A pergunta se refere a um link para outro arquivo. (Eu sei, lento, lento, resposta à sua pergunta, mas achei que outras pessoas poderiam querer saber a resposta.)
RichTBreak
É importante não deixar espaço entre os caracteres] e (
jbustamovej
20

Você vincula a um arquivo local da mesma forma que vincula a imagens locais. Aqui está um exemplo para vincular a um arquivo start_caQtDM_7id.shno mesmo diretório que a fonte de redução:

![start_caQtDM_7id.sh](./start_caQtDM_7id.sh) 
BarryPye
fonte
Esta "!" é importante! Obrigado!
Yuriy Kulikov
Faz parte da sintaxe de markdown do Github para renderizar uma imagem, consulte "Imagens" em guias.github.com/features/mastering-markdown
BarryPye
13

Depois de brincar com a resposta de @ BringBackCommodore64 eu descobri

[link](file:///d:/absolute.md)    # absolute filesystem path
[link](./relative1.md)            # relative to opened file
[link](/relativeToProject.md)     # relative to opened project

Todos eles testados Visual Studio Codee funcionando,

Nota : O caminho absoluto funciona no editor, mas não funciona no modo de visualização de redução!

Ali80
fonte
sua nota é muito importante!
Thinh NV
7

Se você tiver espaços no nome do arquivo, tente estes:

[file](./file%20with%20spaces.md)
[file](<./file with spaces.md>)

O primeiro parece mais confiável

Zikoat
fonte
Não está claro qual é o seu problema e o que você está perguntando. É a pergunta: qual nome do arquivo é mais confiável?
Seymour
1

Obrigado drifty0pine!

A primeira solução, funciona!

[a relative link](../../some/dir/filename.md)
[Link to file in another dir on same drive](/another/dir/filename.md)
[Link to file in another dir on a different drive](/D:/dir/filename.md)

mas precisei colocar mais ../até a pasta onde estava meu arquivo, assim:

[FileToOpen](../../../../folderW/folderX/folderY/folderZ/FileToOpen.txt)
Oubiña
fonte
0

Se o arquivo estiver no mesmo diretório onde está o .md, então apenas colocá-lo [Click here](MY-FILE.md)deve funcionar.

Caso contrário, pode criar um caminho a partir do diretório raiz do projeto. Portanto, se todo o diretório raiz project / git-repo for chamado de 'my-app' e alguém quiser apontar para my-app / client / read-me.md, tente[My hyperlink](/client/read-me.md) .

Pelo menos funciona no Chrome.

Akul Aggarwal
fonte
0

Essa é uma pergunta antiga, mas para mim ainda não parece haver uma resposta completa para a pergunta do OP. A resposta escolhida sobre a segurança ser o possível problema, na verdade, muitas vezes não é o problema ao usar o plug-in 'Markdown Viewer' do Firefox em minha experiência. Além disso, o OP parece estar usando o MS-Windows, então há o problema adicional de especificar unidades diferentes.

Então, aqui está uma resposta um pouco mais completa, porém simples para o plug-in 'Markdown Viewer' no Windows (e outros renderizadores Markdown que já vi): basta inserir o caminho local como faria normalmente e se for um caminho absoluto certifique-se de começar com uma barra. Então:

[a relative link](../../some/dir/filename.md)
[Link to file in another dir on same drive](/another/dir/filename.md)
[Link to file in another dir on a different drive](/D:/dir/filename.md)

Este último foi provavelmente o que o OP estava procurando por seu exemplo. Observe que isso também pode ser usado para exibir diretórios em vez de arquivos.

Embora tarde, espero que isso ajude!

drifty0pine
fonte