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:3000URL 提供我的文件?我尝试过的所有方法都会产生 a404并且找不到该文件。我也愿意采用不同的方式来处理这种情况。这只是我对如何在 SvelteKit 中执行此操作的最佳猜测。
mrk*_*shi 10
对于 ,建议的方法adapter-node是将应用程序数据放置在项目根目录下的新文件夹中(即与/src和并列/static)。然后您可以使用相对路径读取文件:fs.readFile('./my-app-data/foo.txt')。
对于部署,您只需确保node build从项目根目录执行,因为这可以保证您在开发和生产期间拥有相同的工作目录。
该static文件夹可以工作,但它并不意味着携带应用程序数据\xe2\x80\x94 该文件夹中的文件代表直接向用户提供的新路由,因此如果必须以任何方式保护生成的文件,则这是不可取的。即使它们是公共文件,它仍然模糊了应该是生产和源数据的内容:新的部署是否应该覆盖 中的所有文件static?如果您不小心,命名冲突可能意味着覆盖生产数据。
| 归档时间: |
|
| 查看次数: |
10523 次 |
| 最近记录: |