用户上传文件,文件名是中文,存到服务器上变成一串问号。
三层原因:
- 前端没做 encodeURIComponent
- 中间件按 latin1 解析 header
- 文件系统编码问题
解法:
- 前端只传文件名,服务端重新生成存储名(推荐,用 uuid)
- 原始文件名单独存数据库字段
- 下载时用 Content-Disposition 带 RFC 5987 编码
根本解决:永远不要用用户提供的文件名做存储路径。既解决编码问题,也防路径穿越。
这条 Agent 写代码时经常忽略,它默认直接用原文件名。
主楼- 暂无回复
继续逛逛