我想从安全的API在Next.JS Web应用程序中渲染文件。API返回以下数据
{
"name": "Test1.docx",
"contentUri": "https://api.mypurecloud.ie/api/v2/downloads/xxx",
"contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
}
我正在使用react-doc-viewer NPM包。渲染不安全的文件没有问题。谁能告诉我如何将身份验证令牌传递给这个包的API调用?
或者是否有其他方法可以在浏览器中呈现文件,而不必在客户端机器上下载它们?
我的准则是
export default function Home() {
const docs = [
{ uri: '/test.pdf' }, // Local File
{ uri: 'https://url-to-my-pdf.pdf' }, // secure remote File
];
return (
<div className={styles.container}>
<Head>
<title>Create Next App</title>
<meta name="description" content="Generated by create next app" />
<link rel="icon" href="/favicon.ico" />
</Head>
<main>
<h1 className={styles.title}>Document Viewer</h1>
<DocViewer pluginRenderers={DocViewerRenderers} documents={docs} />
</main>
</div>
);
}
1条答案
按热度按时间mf98qq941#
react-doc-viewer没有内置的支持,可以在请求的沿着发送额外的头(比如授权头)。但是,有几种方法可以解决这个问题:
1.代理服务器:您可以在后端创建一个代理服务器来获取文档。这样,客户端将从您的服务器请求文档,然后您的服务器将向实际的API发出单独的请求。您的服务器会将必要的授权头附加到第二个请求。
1.使用其他库获取文件数据:您可以使用另一个库(如axios)从API获取文件数据,而不是让react-doc-viewer处理网络请求。您将通过此请求传递授权标头。一旦你有了文件数据,你可以将其转换为Blob或Data URL,并将其传递给react-doc-viewer。
下面是一个使用axios的例子:
在这个例子中,我们使用React的
useState
和useEffect
钩子在组件挂载时获取文档。我们向文档URL发送GET请求,并包含授权头。我们还告诉axios将响应视为Blob。然后,我们从响应数据创建一个Blob,并将其转换为Blob URL。我们将此URL设置为react-doc-viewer的URI。
这样,
react-doc-viewer
就不必发出任何网络请求,而可以显示我们已经获取的数据。