Skip to content

Conversation

@KirCute
Copy link
Member

@KirCute KirCute commented Aug 25, 2025

Description / 描述

添加了一个将文件划分为限制了大小的若干块的驱动,以文件夹的形式保存分片文件,该文件夹名称为 [openlist_chunk]源文件名,分片文件支持自定义后缀以应对云盘对文件类型的限制。

这是一个与aliascrypt类似的中间件驱动,调用该驱动的List方法得到的文件列表,如果文件夹的前缀为[openlist_chunk]将会被映射为文件,该大小为所有分片文件大小之和,调用Link方法得到的是一个拼接了所有文件分片的RangeReader

Motivation and Context / 背景

Closes #1074

How Has This Been Tested? / 测试

测试了后端存储为localusslanzou的情况,暂时没有发现问题

Checklist / 检查清单

  • I have read the CONTRIBUTING document.
    我已阅读 CONTRIBUTING 文档。
  • I have formatted my code with go fmt or prettier.
    我已使用 go fmtprettier 格式化提交的代码。
  • I have added appropriate labels to this PR (or mentioned needed labels in the description if lacking permissions).
    我已为此 PR 添加了适当的标签(如无权限或需要的标签不存在,请在描述中说明,管理员将后续处理)。
  • I have requested review from relevant code authors using the "Request review" feature when applicable.
    我已在适当情况下使用"Request review"功能请求相关代码作者进行审查。
  • I have updated the repository accordingly (If it’s needed).
    我已相应更新了相关仓库(若适用)。

@KirCute KirCute changed the title feat(chunk): add a driver that divides large files into multiple chunks feat(driver): add a driver that divides large files into multiple chunks Aug 25, 2025
@KirCute KirCute changed the title feat(driver): add a driver that divides large files into multiple chunks feat(drivers): add a driver that divides large files into multiple chunks Aug 25, 2025
@ILoveScratch2 ILoveScratch2 requested a review from Copilot August 26, 2025 10:49
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR introduces a new "chunk" driver that splits large files into multiple smaller parts with size limitations. The driver acts as middleware similar to the existing alias and crypt drivers, filtering chunk files from listings and providing a unified RangeReader that concatenates all chunks when accessing files.

  • Adds a complete chunk driver implementation with file splitting/merging capabilities
  • Implements all standard driver operations (List, Link, Move, Rename, Copy, Remove, Put) with chunk-aware logic
  • Registers the new driver in the driver registry

Reviewed Changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
drivers/chunk/meta.go Driver metadata and configuration with Addition struct defining chunk parameters
drivers/chunk/driver.go Complete driver implementation handling file chunking operations and range reading
drivers/all.go Registration of the new chunk driver import

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@KirCute KirCute requested a review from ILoveScratch2 August 30, 2025 15:46
ILoveScratch2
ILoveScratch2 previously approved these changes Aug 31, 2025
Copy link
Member

@ILoveScratch2 ILoveScratch2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

性能可以优化,不过没什么太大问题

@j2rong4cn
Copy link
Member

性能可以优化,不过没什么太大问题

怎么优化?

@foxxorcat
Copy link
Member

思路可以优化一下,如果按照文件名+后缀的形式区分分配,不可避免的会导致在重命名或移动时(特别是大文件,分块过多的情况下)发送大量的请求,并且因为与网盘的交互基本上没法做到事务,这种涉及大量文件的操作极有可能会因为网络波动或其他原因导致分块的操作丢失。我的建议是以文件夹作为最小的移动或重命名单位,保证对网盘的操作只有一次,并且可以使用文件的hash作为文件名,配合上后缀还可以做断点续传,原始文件名可以编码后作为文件夹的名称。具体细节你可以自己完善

@ILoveScratch2
Copy link
Member

性能可以优化,不过没什么太大问题

怎么优化?

那做的就和这个不一样了。主要是扫描分块消耗性能远比普通文件大

@foxxorcat
Copy link
Member

foxxorcat commented Sep 1, 2025

性能可以优化,不过没什么太大问题

怎么优化?

那做的就和这个不一样了。主要是扫描分块消耗性能远比普通文件大

的确,这也是问题,特别是link基本上没有利用上缓存的优势基本上是重新扫了一遍。其实可以自定义Object对象将一些信息存下在link是就可以避免重新获取,直接断言类型把数据取出来就行。并且link提前获取所有link对于网盘来说如果取消下载的话代价有点太高了

@j2rong4cn
Copy link
Member

性能可以优化,不过没什么太大问题

怎么优化?

那做的就和这个不一样了。主要是扫描分块消耗性能远比普通文件大

的确,这也是问题,特别是link基本上没有利用上缓存的优势基本上是重新扫了一遍。其实可以自定义Object对象将一些信息存下在link是就可以避免重新获取,直接断言类型把数据取出来就行。并且link提前获取所有link对于网盘来说如果取消下载的话代价有点太高了

有缓存的,chunk的model.Link有访问缓存,底层驱动的model.Link有访问缓存有效期

@foxxorcat
Copy link
Member

性能可以优化,不过没什么太大问题

怎么优化?

那做的就和这个不一样了。主要是扫描分块消耗性能远比普通文件大

的确,这也是问题,特别是link基本上没有利用上缓存的优势基本上是重新扫了一遍。其实可以自定义Object对象将一些信息存下在link是就可以避免重新获取,直接断言类型把数据取出来就行。并且link提前获取所有link对于网盘来说如果取消下载的话代价有点太高了

有缓存的,chunk的model.Link有访问缓存,底层驱动的model.Link有访问缓存有效期

我指的是某些情况下可能并不需要读取完整的文件(比如只读取头部)。如果每个文件都要加载完整的link的话就会导致在不必要的情况下发送 (文件数*分块数)个获取link的http请求,对于某些api比较拉跨的网盘缓存未命中的情况下会等待的比较久

@j2rong4cn j2rong4cn marked this pull request as draft September 5, 2025 10:53
@j2rong4cn
Copy link
Member

上传失败时,要删除分片文件夹吗 @KirCute @Suyunmeng

@KirCute
Copy link
Member Author

KirCute commented Sep 15, 2025

上传失败时,要删除分片文件夹吗 @KirCute @Suyunmeng

要删吧

PIKACHUIM
PIKACHUIM previously approved these changes Sep 19, 2025
@jyxjjj jyxjjj merged commit 3936e73 into OpenListTeam:main Sep 19, 2025
12 checks passed
@github-project-automation github-project-automation bot moved this from Todo to Done in OpenList开发计划 Sep 19, 2025
@KirCute KirCute deleted the feat/chunk branch September 19, 2025 11:28
@ILoveScratch2
Copy link
Member

用的时候发现个问题,有些网盘对文件名也有限制,不如统一把文件夹改成[openlist_chunk]0、1、2、3这样,具体的文件名存储在文件夹中的一个单独的文件里面,以实现绕过网盘的文件名限制

你“有的网盘”是蓝奏云吧

@KirCute
Copy link
Member Author

KirCute commented Sep 20, 2025

用的时候发现个问题,有些网盘对文件名也有限制,不如统一把文件夹改成[openlist_chunk]0、1、2、3这样,具体的文件名存储在文件夹中的一个单独的文件里面,以实现绕过网盘的文件名限制

你说的文件名限制是不是指后缀限制啊,CustomExt那个字段可以自定义分片文件的后缀

@ILoveScratch2
Copy link
Member

用的时候发现个问题,有些网盘对文件名也有限制,不如统一把文件夹改成[openlist_chunk]0、1、2、3这样,具体的文件名存储在文件夹中的一个单独的文件里面,以实现绕过网盘的文件名限制

你说的文件名限制是不是指后缀限制啊,CustomExt那个字段可以自定义分片文件的后缀

Ext这个名字还是太抽象了(虽然已经提了中文翻译,但是英文还是ext三个字母)

@OpenListTeam OpenListTeam deleted a comment from bingqingpeng Sep 20, 2025
@jyxjjj
Copy link
Member

jyxjjj commented Sep 20, 2025

@bingqingpeng
感谢你对本项目的关注。需要特别说明的是,本项目开发团队不鼓励、支持或容忍任何违法或侵权的使用场景。
请确保在使用本软件时遵守当地法律法规,并尊重他人的合法权益。
本项目是一个通用工具,旨在帮助用户进行合法、合规的技术开发。
我们注意到你在此处讨论的用法可能涉及侵犯版权或其他违法行为。为避免误导和不当使用,我们将删除此你的评论。
再次提醒:开发团队不容忍侵权用途,请在合规前提下使用本软件。

@bingqingpeng
Copy link

bingqingpeng commented Sep 20, 2025

@bingqingpeng 感谢你对本项目的关注。需要特别说明的是,本项目开发团队不鼓励、支持或容忍任何违法或侵权的使用场景。 请确保在使用本软件时遵守当地法律法规,并尊重他人的合法权益。 本项目是一个通用工具,旨在帮助用户进行合法、合规的技术开发。 我们注意到你在此处讨论的用法可能涉及侵犯版权或其他违法行为。为避免误导和不当使用,我们将删除此你的评论。 再次提醒:开发团队不容忍侵权用途,请在合规前提下使用本软件。

我已经把所有回复都删除了
不好意思,没想这么多去了,确实这么搞会有风险,当我什么都没说吧,保持原样就好

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] 建议增加类似rclone的chunker的文件分块存储功能

8 participants