nextjs动态路由下载文件服务端代码
时间: 2023-10-27 12:04:52 浏览: 39
在 Next.js 中,可以使用 `getServerSideProps` 函数来处理动态路由。在该函数中,可以通过 `res` 对象向客户端发送文件。
以下是一个示例代码,用于在 Next.js 中处理动态路由并提供文件下载服务:
```jsx
import fs from 'fs';
export async function getServerSideProps({ params, res }) {
const { fileId } = params;
const filePath = `./public/files/${fileId}.pdf`; // 文件路径
// 检查文件是否存在
if (!fs.existsSync(filePath)) {
res.statusCode = 404;
res.end('File not found');
return { props: {} };
}
// 设置响应头
res.setHeader('Content-Disposition', `attachment; filename=${fileId}.pdf`);
res.setHeader('Content-Type', 'application/pdf');
// 读取文件并发送给客户端
const fileContent = fs.readFileSync(filePath);
res.send(fileContent);
return { props: {} };
}
function FileDownload({}) {
return <div>Downloading file...</div>;
}
export default FileDownload;
```
在上述代码中,我们首先检查文件是否存在,如果不存在则返回 404 错误。然后设置响应头,告诉客户端将文件作为附件下载,并设置正确的 MIME 类型。最后,我们读取文件内容并将其发送给客户端。
请注意,文件路径应该是相对于 Next.js 项目根目录的。在上述示例代码中,我们假设文件存储在 `public/files` 目录中,并且文件名是动态路由参数 `fileId` 的值加上 `.pdf` 后缀。因此,如果用户访问 `/files/123.pdf`,我们将读取 `./public/files/123.pdf` 文件并返回给客户端。
希望对你有所帮助!