View/Download React 中的 Pdf 文件 - 路由器 4
View/Download Pdf Files in React - Router 4
我的项目文件夹中有一组 pdf 文件。
我需要做的就是为这些 PDF 文件创建一个 link 并在浏览器中查看或下载它们。
我使用 React Router 4 和 React 16 以及 create-react-app 引导工具。
无论我如何 link 它(Link 组件或标签)它仍然会转到我路由器配置中的最后一条路线。
过去两个小时我一直在谷歌搜索...但没有运气..
有没有办法告诉路由器不要路由 PDF/XLS 个文件?
谢谢
我遇到了同样的问题,我认为这是因为 CRA 处理查询的方式:我最终将我的 PDF 文件放在 public 文件夹中,然后 link 使用 :
{process.env.PUBLIC_URL + '/myfile.pdf'}
作为我的标签的来源。
我猜这不是最好的方法,但效果很好...
我尝试了 squizz 的方法,但我发现的问题是,如果您多次单击 link,它将返回到最后一条路线。
您可以在 src
中创建一个文件夹来保存您的 pdf,然后 link 正常保存它们,例如:
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
这对我有用:
<Link
to="route"
onClick={(event) => { event.preventDefault(); window.open(filePath); }}>
Click to download
</Link>
运行 进入同样的问题并通过诉诸老式 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 组件和子导航组件的 link 中。我在 src 目录中创建了一个 'docs' 文件夹,并在我的文件中使用了 link 的 require 语法,它对我有用。
在导航组件的实例中,我通过将目录向上更改两级来访问文件。
<Link href={require("../../docs/FILE_NAME.PDF")} target="blank">
Resume
<Link>
我在同一目录下搜索到的App组件实例
<Link href={require("./docs/FILE_NAME.PDF")} target="blank">
Resume
</Link>
我发现这些答案中有很多都使我想做的事情变得过于复杂,所以这里是对我有用的答案。我将所有 pdf 转储到 /public/documents/<sample-consent-form.pdf>
并以这种方式链接它们。这将在新 window 中打开 pdf 视图,无需任何自定义组件或库。
const consentLink = (
<span>
Please review our{" "}
<a href="/documents/sample-consent-form.pdf" target="_blank">
consent policy
</a>{" "}
before accepting
</span>
);
我的项目文件夹中有一组 pdf 文件。
我需要做的就是为这些 PDF 文件创建一个 link 并在浏览器中查看或下载它们。
我使用 React Router 4 和 React 16 以及 create-react-app 引导工具。
无论我如何 link 它(Link 组件或标签)它仍然会转到我路由器配置中的最后一条路线。
过去两个小时我一直在谷歌搜索...但没有运气..
有没有办法告诉路由器不要路由 PDF/XLS 个文件?
谢谢
我遇到了同样的问题,我认为这是因为 CRA 处理查询的方式:我最终将我的 PDF 文件放在 public 文件夹中,然后 link 使用 :
{process.env.PUBLIC_URL + '/myfile.pdf'}
作为我的标签的来源。
我猜这不是最好的方法,但效果很好...
我尝试了 squizz 的方法,但我发现的问题是,如果您多次单击 link,它将返回到最后一条路线。
您可以在 src
中创建一个文件夹来保存您的 pdf,然后 link 正常保存它们,例如:
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
这对我有用:
<Link
to="route"
onClick={(event) => { event.preventDefault(); window.open(filePath); }}>
Click to download
</Link>
运行 进入同样的问题并通过诉诸老式 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 组件和子导航组件的 link 中。我在 src 目录中创建了一个 'docs' 文件夹,并在我的文件中使用了 link 的 require 语法,它对我有用。
在导航组件的实例中,我通过将目录向上更改两级来访问文件。
<Link href={require("../../docs/FILE_NAME.PDF")} target="blank">
Resume
<Link>
我在同一目录下搜索到的App组件实例
<Link href={require("./docs/FILE_NAME.PDF")} target="blank">
Resume
</Link>
我发现这些答案中有很多都使我想做的事情变得过于复杂,所以这里是对我有用的答案。我将所有 pdf 转储到 /public/documents/<sample-consent-form.pdf>
并以这种方式链接它们。这将在新 window 中打开 pdf 视图,无需任何自定义组件或库。
const consentLink = (
<span>
Please review our{" "}
<a href="/documents/sample-consent-form.pdf" target="_blank">
consent policy
</a>{" "}
before accepting
</span>
);