在 React - Router 4 中查看/下载 Pdf 文件

IT技术 reactjs react-router-v4 create-react-app
2021-05-19 07:57:13

我的项目中的文件夹中有一组 pdf 文件。

我需要做的就是创建这些 PDF 文件的链接,然后在浏览器中查看或下载。

我使用 React Router 4 和 React 16 以及 create-react-app 引导工具。

无论我如何链接它(链接组件或标签),它仍然会转到我的路由器配置中的最后一个路由。

我一直在谷歌搜索过去两个小时......但没有运气......

有什么方法可以告诉路由器不要路由 PDF/XLS 文件吗?

谢谢

4个回答

我尝试了 squizz 的方式,但我发现的问题是,如果您单击链接不止一次或两次,它会返回到最后一条路线。

您可以创建一个文件夹src来保存您的 pdf,并正常链接到它们,例如:

import pdf from '../files/myfile.pdf'
render () {
    <a href={pdf}>Click here for my pdf</a>
}

唯一的问题是,您会在文件中附加一个哈希值,因此它会以 myfile.d2e24234.pdf 或其他形式出现。我认为这与文件加载器有关......目前正在试图弄清楚。

编辑

如果您不想使用 src,那么答案是从 create-react-app 项目中删除 service worker。出于某种原因,它会影响 react-router 对服务器路由的处理。

我在这里做了一个 github 问题来阅读它:https : //github.com/facebookincubator/create-react-app/issues/3608

我遇到了同样的问题,我认为这是因为 CRA 处理查询的方式:我最终将我的 PDF 文件放在公共文件夹中,并使用以下链接链接到它们:

{process.env.PUBLIC_URL + '/myfile.pdf'}

作为 src 到我的标签。

我猜不是最好的方法,但效果很好......

遇到了同样的问题并通过使用老式的 html 来修复它:

<a href="docs/document.pdf">
  Document
</a>

并使用 webpack.config 中的 CopyWebpackPlugin 将 pdf 复制到我的公共文件夹中:

plugins: [
    new CopyWebpackPlugin([
      {
        from: 'docs/document.pdf',
        to: path.resolve(BUILD_PATH + "/docs/document.pdf")
      },
    ])
]

我在项目的两个不同区域遇到了这个问题,在 src 文件夹中的 App 组件和来自子导航组件的链接中。我在 src 目录中创建了一个“docs”文件夹,并使用 require 语法链接到我的文件,它对我有用。

在导航组件的实例中,我通过将目录向上更改两级来访问该文件。

<Link href={require("../../docs/FILE_NAME.PDF")} target="blank">
      Resume
<Link>

在 App 组件的实例中,我在同一个目录中搜索。

<Link href={require("./docs/FILE_NAME.PDF")} target="blank">
      Resume
</Link>