amtoaer / bili-sync

由 Rust & Tokio 驱动的哔哩哔哩同步工具
https://bili-sync.allwens.work
MIT License
402 stars 34 forks source link

标题过长会导致视频下载出错 #70

Closed kkkdkk closed 3 months ago

kkkdkk commented 3 months ago

有时候标题名称过长会导致报错,能否对标题进行一定的规范,比如截取前面多少个字,替代掉无法作为文件名的字 (File name too long. OS error 06) 如bvid: BV1uY4y1G77U

amtoaer commented 3 months ago

这个比较难搞,我只隐约记得 windows 的文件名最长是 255 个字符,而这个视频的名字是“修边机几乎可以干木工里所有的事情,只要你用了正确的附件和刀头,修边机可以帮助你完成很多工作。那怎么选择修边机呢?哪些品牌不能买?视频告诉你答案”,一共 213 个字符。所以有点怀疑是 255 个字符是绝对路径长度的限制。 如果是绝对路径,可能性就很多了。比如视频下载的目标路径是 xxx/xxx/xxx/(正好255个字符),那么这个路径下不管程序做什么处理实际上都是无法正常工作的。或者程序对绝对路径截断了 255 个字符,但是程序运行于 docker 中,该路径在宿主机中映射到一个更长的路径,那么同样会出问题。所以很难在程序层面做一个比较通用的处理。 我目前想到的修改策略是添加一个最大长度配置,程序会读取这个配置对 video_name 做截断处理,但这个最大长度具体需要是多少需要用户自行尝试(原因如上所述)。此外,推荐尝试将 bili-sync 的目标位置放在浅层路径下,应该会在一定程度上缓解该问题。

kkkdkk commented 3 months ago

这个比较难搞,我只隐约记得 windows 的文件名最长是 255 个字符,而这个视频的名字是“修边机几乎可以干木工里所有的事情,只要你用了正确的附件和刀头,修边机可以帮助你完成很多工作。那怎么选择修边机呢?哪些品牌不能买?视频告诉你答案”,一共 213 个字符。所以有点怀疑是 255 个字符是绝对路径长度的限制。 如果是绝对路径,可能性就很多了。比如视频下载的目标路径是 xxx/xxx/xxx/(正好255个字符),那么这个路径下不管程序做什么处理实际上都是无法正常工作的。或者程序对绝对路径截断了 255 个字符,但是程序运行于 docker 中,该路径在宿主机中映射到一个更长的路径,那么同样会出问题。所以很难在程序层面做一个比较通用的处理。 我目前想到的修改策略是添加一个最大长度配置,程序会读取这个配置对 video_name 做截断处理,但这个最大长度具体需要是多少需要用户自行尝试(原因如上所述)。此外,推荐尝试将 bili-sync 的目标位置放在浅层路径下,应该会在一定程度上缓解该问题。

我的想法也是新增一个配置,可以用户自定义来设置最长title字数。 因为,其实完整的很长的文件名并没有任何意义,可能只需要前面的十几二十个字就完全能满足使用

amtoaer commented 3 months ago

2.0.1版本做了支持,遇到问题可以重新打开。