我开发了一个Web组件,使用带有webkitdirectory
属性的HTML输入上传文件夹子文件夹中的所有文件,但当我在不同的机器上使用Javascript迭代输入的文件列表时,我注意到子文件夹的排序顺序中有一个奇怪的错误。
我在几台运行Windows 10、11或Ubuntu 22的计算机上进行了测试,子文件夹按字母升序排序但在一台特定的Windows 11计算机上,它们按降序排序。
下面是处理输入的Typescript代码:
const files = Array.from((event.target as HTMLInputElement).files || [])
const filesByDirectory = R.groupBy(files, (file) =>
file.webkitRelativePath.split("/").slice(0, -1).join("/")
)
for (const folder of filesByDirectory) {
await this.uploadFiles(filesByDirectory[folder], folder.split("/").pop() as string)
}
我原以为子文件夹的默认排序顺序总是一致的,字母顺序和升序,但似乎不是。
同时,我在上传前添加了一行来排序文件夹列表,但我仍然想了解为什么它对那台机器来说是不同的?底层规则或默认值是什么?
1条答案
按热度按时间0lvr5msh1#
事实上,the specs不需要任何定义的排序,而且浏览器似乎确实遵从操作系统来设置该排序。
在我的macOS系统上,我有一个明显任意的顺序:文件不会按名称、修改日期或创建日期、大小、类型或OS文件资源管理器(Finder)提供的任何其他排序规则进行排序,但所有浏览器对同一文件夹都返回相同的顺序。
因此,您不应该依赖于任何特定的排序,而是将收到的
FileList
对象转换为Array
*,然后根据需要进行排序。