Cli*_*rum 7 rest fs svelte sveltekit
我正在尝试提供我的 SvelteKit 应用程序生成的 PDF 文件,并允许用户从端点下载它。
我的项目结构如下所示:
---------------------
/src/routes/downloads
---------------------
[file].ts
ABC.pdf
XYZ.pdf
Run Code Online (Sandbox Code Playgroud)
我的[file].ts
端点如下所示:
import fs from 'fs'
// ----- GET -----
export async function get({ params }){
//console.log(params.file) -> ABC
var pdf = fs.readFileSync('./src/routes/downloads/'+params.file+'.pdf')
return{
status:200,
headers: {
"Content-type" : "application/pdf",
"Content-Disposition": "attachment; filename="+params.file+".pdf"
},
body: pdf
}
}
Run Code Online (Sandbox Code Playgroud)
所以当我点击 时http://localhost:3000/downloads/ABC
,名为 downloads 的 PDF 文件ABC.pdf
。
但我的readFileSync
道路不适用于生产。据我所知,没有/src/routes
文件夹。
如何通过http://localhost:3000
URL 提供我的文件?我尝试过的所有方法都会产生 a404
并且找不到该文件。我也愿意采用不同的方式来处理这种情况。这只是我对如何在 SvelteKit 中执行此操作的最佳猜测。
mrk*_*shi 10
对于 ,建议的方法adapter-node
是将应用程序数据放置在项目根目录下的新文件夹中(即与/src
和并列/static
)。然后您可以使用相对路径读取文件:fs.readFile('./my-app-data/foo.txt')
。
对于部署,您只需确保node build
从项目根目录执行,因为这可以保证您在开发和生产期间拥有相同的工作目录。
该static
文件夹可以工作,但它并不意味着携带应用程序数据\xe2\x80\x94 该文件夹中的文件代表直接向用户提供的新路由,因此如果必须以任何方式保护生成的文件,则这是不可取的。即使它们是公共文件,它仍然模糊了应该是生产和源数据的内容:新的部署是否应该覆盖 中的所有文件static
?如果您不小心,命名冲突可能意味着覆盖生产数据。
归档时间: |
|
查看次数: |
10523 次 |
最近记录: |