HFrost0 / bilix

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

文件名超长 #72

Closed vycz closed 1 year ago

vycz commented 1 year ago
WARNING  STREAM Unexpected Exception class:OSError [Errno 36] Filename too long:
         'videos/【收藏夹】不吐橙子皮-默认收藏夹/马士兵主讲:JVM真的不难!从零  
         学会Java                                                               
         JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识/  
         马士兵主讲:JVM真的不难!从零学会Java                                  
         JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识-  
         P34-程序员必懂的GC知识:从本质谈起,只要冯诺依曼计算机体系存在,这个流 
         !-audio-0-458303'                                                     
Traceback (most recent call last):
  File "/app/main.py", line 36, in <module>
    schedule.run_pending()
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 780, 
in run_pending
    default_scheduler.run_pending()
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 100, 
in run_pending
    self._run_job(job)
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 172, 
in _run_job
    ret = job.run()
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 661, 
in run
    ret = self.job_func()
  File "/app/main.py", line 25, in job
    asyncio.run(main())
  File "/usr/local/lib/python3.9/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/local/lib/python3.9/asyncio/base_events.py", line 642, in 
run_until_complete
    return future.result()
  File "/app/main.py", line 19, in main
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 197, in get_favour
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 210, in _get_favor_by_page
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 365, in get_series
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 431, in get_video
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/base_downloader_part.py",
line 70, in get_media
    file_list = await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/base_downloader_part.py",
line 98, in _get_media_part
    async with aiofiles.open(file_path, 'ab') as f:
  File "/usr/local/lib/python3.9/site-packages/aiofiles/base.py", line 78, in 
__aenter__
    self._obj = await self._coro
  File "/usr/local/lib/python3.9/site-packages/aiofiles/threadpool/__init__.py",
line 80, in _open
    f = yield from loop.run_in_executor(executor, cb)
  File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
OSError: [Errno 36] Filename too long: 
'videos/【收藏夹】不吐橙子皮-默认收藏夹/马士兵主讲:JVM真的不难!从零学会Java 
JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识/马士兵主讲 
JVM真的不难!从零学会Java 
JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识-P34-程
序员必懂的GC知识:从本质谈起,只要冯诺依曼计算机体系存在,这个流程就永远不变!-a
58303'
马士兵主讲:JVM真的不难!从...向未来,学习路线指引与职业规划 100.0% ╸ … … ETA 0…
                                                                      … …       
马士兵主讲:JVM真的不难!从...体系存在,这个流程就永远不变!  0.0%  ━ … ? ETA -…
                                                                      …   

辛苦帮忙看下

HFrost0 commented 1 year ago

这个会尽快处理

HFrost0 commented 1 year ago

master分支现在的版本应该可以暂时解决这个问题

HFrost0 commented 1 year ago

这个文件超出长度的bug在之前 #8 曾经就出现过,现在的截断策略我认为略微激进了些(超过100字符即截断,这可能导致部分文件失去足够的尾部信息),在 https://bugs.python.org/issue18199 中提到windows的某些版本可能像unix系统那样更好的支持了长文件/路径。

HFrost0 commented 1 year ago

在0.12.1之后的版本中,视频自身标题过长时仅使用分P名作为文件名来尽量避免这个问题,但是过长的分P名仍然有可能导致此问题。我不太希望通过截断的方式来解决。