HFrost0 / bilix

⚡️Lightning-fast async download tool for bilibili and more
Apache License 2.0
1.6k stars 166 forks source link

分P的文件名过长导致的无法下载问题 #116

Closed luckykeeper closed 1 year ago

luckykeeper commented 1 year ago

系统环境:Debian 11 ,OpenEuler 22.03 均发现存在此问题 bilix 版本:Version 0.15.0 如同 HFrost0/bilix#8 和 HFrost0/bilix#72 提到的,发现过长的分P名导致无法下载的问题

bilix up 'https://space.bilibili.com/436037759' --dir ./ --max-con 1 -sr 99 --image --subtitle --dm -n 99999999 --cookie f****2

WARNING STREAM Unexpected Exception class:OSError [Errno 36] File name too long: './/【up】碧蓝档案情报站/【碧蓝档案】主线 Vol.3「伊甸条约」篇 第4章「献给被忘却的神明们的垂怜经」PV/【碧蓝档案】主线 Vol.3「伊甸条约」篇 第4章「献给被忘却的神明们的垂怜经」PV-P1-【ブルーアーカイブ】メインストーリー\u3000Vol.3「エデン条約」編 第4章「忘れられた神々のためのキリエ」PV-video-0-1717502' WARNING STREAM Unexpected Exception class:OSError [Errno 36] File name too long: './/【up】碧蓝档案情报站/【碧蓝档案】主线 Vol.3「伊甸条约」篇 第4章「献给被忘却的神明们的垂怜经」PV/【碧蓝档案】主线 Vol.3「伊甸条约」篇 第4章「献给被忘却的神明们的垂怜经」PV-P1-【ブルーアーカイブ】メインストーリー\u3000Vol.3「エデン条約」編 第4章「忘れられた神々のためのキリエ」PV-video-5152509-6870011' Traceback (most recent call last): File "/usr/local/bin/bilix", line 8, in sys.exit(main()) File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1130, in call return self.main(args, kwargs) File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1055, in main rv = self.invoke(ctx) File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1404, in invoke return ctx.invoke(self.callback, ctx.params) File "/usr/local/lib/python3.9/site-packages/click/core.py", line 760, in invoke return __callback(args, *kwargs) File "/usr/local/lib/python3.9/site-packages/bilix/main.py", line 344, in main loop.run_until_complete(cor) File "/usr/lib64/python3.9/asyncio/base_events.py", line 642, in run_until_complete return future.result() File "/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", line 228, in get_up_videos await asyncio.gather(cors) File "/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", line 239, in _get_up_videos_by_page await asyncio.gather( File "/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", line 273, in get_series await asyncio.gather(cors) File "/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", line 339, in get_video await asyncio.gather(cors) File "/usr/local/lib/python3.9/site-packages/bilix/download/base_downloader_part.py", line 87, in get_file file_list = await asyncio.gather(cors) File "/usr/local/lib/python3.9/site-packages/bilix/download/base_downloader_part.py", line 115, in _get_file_part async with aiofiles.open(file_path, 'ab') as f: File "/usr/local/lib/python3.9/site-packages/aiofiles/base.py", line 98, in aenter self._obj = await self._coro File "/usr/local/lib/python3.9/site-packages/aiofiles/threadpool/init.py", line 97, in _open f = yield from loop.run_in_executor(executor, cb) File "/usr/lib64/python3.9/concurrent/futures/thread.py", line 58, in run result = self.fn(self.args, **self.kwargs) OSError: [Errno 36] File name too long: './/【up】碧蓝档案情报站/【碧蓝档案】主线 Vol.3「伊甸条约」篇 第4章「献给被忘却的神明们的垂怜经」PV/【碧蓝档案】主线 Vol.3「伊甸条约」篇 第4章「献给被忘却的神明们的垂怜经」PV-P1-【ブルーアーカイブ】メインストーリー\u3000Vol.3「エデン条約」編 第4章「忘れられた神々のためのキリエ」PV-video-0-1717502'

看到 HFrost0/bilix#72 提到了这个问题但是该 issue 已经关闭,正好碰到了这样的视频,之前在 HFrost0/danmakuC#6 的回复提了一下这个问题,不过最开始我那 Debian 扬了没记录下来,重新装了 OpenEuler 又遇到了,所以这里单独开一个 issue 再提一下,当时说不大希望通过截断的方式解决,不知道现在大大您有什么想法了嘛?可否暂时提供一个选项在分P文件名过长时截断文件名使得可以顺利完成下载呢?感谢~

HFrost0 commented 1 year ago

这确实是一个问题,但我目前没有太多时间在别的机器上调试

HFrost0 commented 1 year ago

另外,这个问题跟层级文件夹有一定的关联,你可以试试--no-hierarchy参数

luckykeeper commented 1 year ago

尝试增加了 --no-hierarchy 参数,问题仍然存在,程序的工作目录为 /bili ,加上 --no-hierarchy 参数后,前面的层级文件夹名称已经足够短,只能说这个分P名称实在是太长了🤣

希望后续的版本中能够优化一下这个问题,或是针对这种情况截断一下文件名,或是提供一个选项对超过一定长度的文件名(或者是全部的)采用其它命名方式

可以参考一下 唧唧Down 的命名方式,这里我去用它下了一下上面 bilix 因为文件名过长出错的视频,它是这么命名的

PS D:\Program Files\JiJiDown\Download> tree /F D:. └─【碧蓝档案】主线 Vol.3「伊甸条约」篇 第4章「献给被忘却的神明们的垂怜经」PV 1.【ブルーアーカイブ】メインストーリー Vol.3「エデン条約」編 第4章「忘(Av641848957,P1).mp4 2.防撞用(Av641848957,P2).mp4

它的命名格式是把后面超长的地方截断之后添加了AV号和P数

最后,以下是 bilix 添加了 --no-hierarchy 参数的命令和结果参考:

bilix up 'https://space.bilibili.com/436037759' --dir ./ --max-con 1 -sr 99 --image --subtitle --dm -n 99999999 --cookie f*****2 --no-hierarchy

WARNING STREAM Unexpected Exception class:OSError [Errno 36] File name too long: './/【碧蓝档案】主线 Vol.3「伊甸条约」篇 第4章「献给被忘却的神明们的垂怜经」PV-P1-【ブルーアーカイブ】メインストーリー\u3000Vol.3「エデン条約」編 第4章「忘れられた神々のためのキリエ」PV-video-0-1717502' WARNING STREAM Unexpected Exception class:OSError [Errno 36] File name too long: './/【碧蓝档案】主线 Vol.3「伊甸条约」篇 第4章「献给被忘却的神明们的垂怜经」PV-P1-【ブルーアーカイブ】メインストーリー\u3000Vol.3「エデン条約」編 第4章「忘れられた神々のためのキリエ」PV-video-5152509-6870011' Traceback (most recent call last): File "/usr/local/bin/bilix", line 8, in sys.exit(main()) File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1130, in call return self.main(args, kwargs) File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1055, in main rv = self.invoke(ctx) File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1404, in invoke return ctx.invoke(self.callback, ctx.params) File "/usr/local/lib/python3.9/site-packages/click/core.py", line 760, in invoke return __callback(args, *kwargs) File "/usr/local/lib/python3.9/site-packages/bilix/main.py", line 344, in main loop.run_until_complete(cor) File "/usr/lib64/python3.9/asyncio/base_events.py", line 642, in run_until_complete return future.result() File "/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", line 228, in get_up_videos await asyncio.gather(cors) File "/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", line 239, in _get_up_videos_by_page await asyncio.gather( File "/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", line 273, in get_series await asyncio.gather(cors) File "/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", line 339, in get_video await asyncio.gather(cors) File "/usr/local/lib/python3.9/site-packages/bilix/download/base_downloader_part.py", line 87, in get_file file_list = await asyncio.gather(cors) File "/usr/local/lib/python3.9/site-packages/bilix/download/base_downloader_part.py", line 115, in _get_file_part async with aiofiles.open(file_path, 'ab') as f: File "/usr/local/lib/python3.9/site-packages/aiofiles/base.py", line 98, in aenter self._obj = await self._coro File "/usr/local/lib/python3.9/site-packages/aiofiles/threadpool/init.py", line 97, in _open f = yield from loop.run_in_executor(executor, cb) File "/usr/lib64/python3.9/concurrent/futures/thread.py", line 58, in run result = self.fn(self.args, **self.kwargs) OSError: [Errno 36] File name too long: './/【碧蓝档案】主线 Vol.3「伊甸条约」篇 第4章「献给被忘却的神明们的垂怜经」PV-P1-【ブルーアーカイブ】メインストーリー\u3000Vol.3「エデン条約」編 第4章「忘れられた神々のためのキリエ」PV-video-0-1717502'

HFrost0 commented 1 year ago

感谢建议,只是目前确实比较忙,这个会在之后的版本中进行修复

HFrost0 commented 1 year ago

版本0.17.0应该针对这个问题进行了系统性的修复

luckykeeper commented 1 year ago

感谢大佬修复🎉,晚些时候改完论文😓我会进行一下测试,如果没有问题我将关闭此 issues

luckykeeper commented 1 year ago

测试了一下,问题已经解决,再次感谢大佬的付出~