我正在写一个简单的文件服务器来上传和下载express@4.18.2文件,我被困在下载部分。每当我试图下载一个没有名字,只有扩展名的文件(比如.gitignore
或.prettierrc)
与res.download
,我得到一个NotFoundError(见下面的完整错误消息)。示例:
app.get("/download", function (req: Request, res: Response) {
res.download("C:/Users/stadl/Desktop/File-Server/.gitignore");
});
会导致NotFoundError,但以下操作有效:
app.get("/download", function (req: Request, res: Response) {
res.download("C:/Users/stadl/Desktop/File-Server/t.txt");
});
文件路径都正确,并且两个文件都存在,目录结构如下所示:
C:/Users/stadl/Desktop/File-Server/
|
|
| - - - client/
| - - - server/
| |
| | - - - server.ts (contains the app.get("/download")... snippet)
| . . .
|
| - - - .gitignore
| - - - t.txt
|
. . .
对于相对路径(../.gitignore
和../t.txt
)也是如此。这是一个bug吗?是有意的吗?还是我做错了什么?
1条答案
按热度按时间mnemlml81#
您需要通过设置
allow
来允许res.download
的options
对象中的点文件,因为默认情况下它是禁用/忽略的(默认值ignore
发送404):参见:
点文件
提供点文件的选项。可能的值是"允许"、"拒绝"、"忽略"。
https://expressjs.com/en/5x/api.html#res.download
以及
点文件
此选项的可能值为:
"allow"-不对点文件进行特殊处理。
"deny"-拒绝对. file的请求,用403响应,然后调用next()。
"ignore"--就像这个点文件不存在一样,用404响应,然后调用next()。
https://expressjs.com/en/5x/api.html#express.static