php - Laravel 文件上传或移动带有特殊字符的问题
问题描述
我已经在我的应用程序中成功实现了一些 Laravel 文件管理功能:上传、下载、移动。至少我会说它是成功的,因为它工作正常,直到我发现在文件名/路径中存储带有一些特殊字符的文件时遇到问题。
就我而言,我已经用冒号字符对其进行了注释。还有其他角色可以触发它。我可以成功注册一个带有文件输入的表单:我的意思是没有这些字符,我可以毫无问题地上传、下载和编辑。但是一旦我在我的文件名中得到一个冒号,一个用于路径的输入字段:($filename = $request->input('inputFileName') .'.'. $file->getClientOriginalExtension();
$path = $file->storeAs('folder',$filename);
)我遇到了问题。
首先,文件名不再被很好地记录:从冒号开始,文件名的其余部分没有被注册。例如,假设文件名的输入是a:b
; 在我的文件夹中,我将a
注册而不是扩展名。不用说这让我得到File not found at path
错误..想要下载时。当我想将带有冒号的文件名更改为另一个时,我也会收到该错误。我在编辑中也提到的另一件事是,如果没有这些字符(此处为冒号),我无法将文件重命名为带有它的文件。这样做时,我得到php: Warning: rename The filename, directory name, or volume label syntax is incorrect. (code: 123)
. 我已经寻找它并找到了这个。它似乎与操作系统文件系统有关。我在使用 Laravel 5.8 的 Windows 10 操作系统上。
你们中是否有人已经遇到过这个问题,你是如何解决这个问题的?Laravel 有什么可以处理的吗?.. 任何帮助或建议将不胜感激
解决方案
不要使用原始名称保存文件,只需生成一个随机名称来保存文件并将原始名称(如果需要)保留在您的数据库或事件中保存的文件旁边的另一个文件中。永远不要相信客户端的输入。
推荐阅读
- javascript - forEach 循环中的异步/等待
- javascript - React Native:Linking.openUrl 抛出“可能的未处理承诺拒绝(id:0):错误:无法打开 URL:”
- reactjs - 使用 TypeScript 的函数组件中的道具问题
- javascript - 打印从 {start} 到 {end} 的文本(含)
- python - 在 Python 中使用 XPATH,我真的需要使用 get() 或 getall() 还是 xpath 字符串就足够了
- git - 在詹金斯中建立访问权限
- google-chrome - How to find image file size in chrome inspect element
- dotnetrdf - dotNetRDF 不解析 LinkedMovie.nt (VDS.RDF.Parsing.RdfParseException)
- javascript - 如何在 ReactJS 的内联样式中动态更改动画值
- python - RuntimeError:使用语音需要 PyNaCl 库