具有webkitdirectory属性的HTML输入在不同的计算机上具有不同的默认排序顺序

3xiyfsfu  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(118)

我开发了一个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)
}

我原以为子文件夹的默认排序顺序总是一致的,字母顺序和升序,但似乎不是。
同时,我在上传前添加了一行来排序文件夹列表,但我仍然想了解为什么它对那台机器来说是不同的?底层规则或默认值是什么?

0lvr5msh

0lvr5msh1#

事实上,the specs不需要任何定义的排序,而且浏览器似乎确实遵从操作系统来设置该排序。
在我的macOS系统上,我有一个明显任意的顺序:文件不会按名称、修改日期或创建日期、大小、类型或OS文件资源管理器(Finder)提供的任何其他排序规则进行排序,但所有浏览器对同一文件夹都返回相同的顺序。
因此,您不应该依赖于任何特定的排序,而是将收到的FileList对象转换为Array *,然后根据需要进行排序。

  • OP包含了一个如何执行此操作的示例。

相关问题