Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

基于文件大小的智能中转与直连下载策略实现方案 #7277

Open
4 tasks done
shenyunet opened this issue Sep 27, 2024 · 3 comments
Open
4 tasks done

基于文件大小的智能中转与直连下载策略实现方案 #7277

shenyunet opened this issue Sep 27, 2024 · 3 comments
Labels
enhancement New feature or request

Comments

@shenyunet
Copy link

shenyunet commented Sep 27, 2024

Please make sure of the following things

  • I have read the documentation.
  • I'm sure there are no duplicate issues or discussions.
  • I'm sure this feature is not implemented.
  • I'm sure it's a reasonable and popular requirement.

Description of the feature / 需求描述

在使用 OneDrive 等网盘时,增加一个文件大小控制选项。具体功能是:用户可以自行设定一个文件大小阈值,例如小于指定的 M(兆字节)大小的文件通过服务器中转,大于该大小的文件则使用 302 跳转直连下载。这一功能可以优化小文件的传输效率,

Suggested solution / 实现思路

  1. 用户请求下载文件 ->

  2. Alist 获取文件大小 ->

  3. 比较文件大小与设定阈值 ->

    • 小于阈值: Alist 中转下载 -> 发送给客户端
    • 大于阈值: 返回 302 重定向链接 -> 客户端从网盘直接下载
  4. 添加文件大小判断逻辑
    在文件下载请求处理的地方,获取文件的大小信息。通常可以通过 API(例如 OneDrive 的 API)获取到文件的元数据,其中包含文件大小。

  5. 设置大小阈值
    在 Alist 的配置中,增加一个文件大小阈值的设置项。用户可以自定义这个阈值,比如 x MB。同时,也需要允许用户在后台面板上配置这个值。

  6. 判断文件下载方式
    根据文件大小与设定的阈值进行比较:

如果文件大小小于用户设定的阈值,则通过服务器中转,Alist 从网盘下载文件,再返回给客户端。这对于小文件更安全并且可以避免过度频繁的直连下载。
如果文件大小大于阈值,则生成 302 重定向链接,直接让客户端从网盘服务获取文件。这种方式对大文件更加高效,减少服务器负载。
4. 生成 302 重定向链接
当文件大于阈值时,Alist 应生成一个 302 HTTP 重定向响应,带有指向网盘的真实下载地址的 URL。客户端接收到 302 响应后,会自动跳转并从网盘服务直接下载文件。

  1. 确保 API 权限和下载链接有效性
    确保网盘服务支持通过 API 获取到文件的下载链接,并且链接在一定时间内是有效的。如果需要,Alist 可以通过 API 刷新或重新获取下载链接。

  2. 性能优化
    为了避免频繁向网盘 API 请求文件大小信息,可以在 Alist 中增加一个缓存机制,将文件的元数据(包括文件大小)暂存一段时间,以提高性能。

  3. UI 设计
    在 Alist 的管理界面中,为用户提供简单直观的配置选项,可以设置文件大小阈值,以及查看当前的传输方式(中转或直连)的工作状态。

Additional context / 附件

我记得很早以前,onemanager 这个程序好像就有这个功能

@shenyunet shenyunet added the enhancement New feature or request label Sep 27, 2024
Copy link

welcome bot commented Sep 27, 2024

Thanks for opening your first issue here! Be sure to follow the issue template!

@shenyunet
Copy link
Author

或者 设置指定扩展名的文件走直连,指定文件名走中转

@linch0318
Copy link

#7269
你看这个issue,你我的需求是一致的,文件大小分流或者扩展名分流。
alist底层套用的是rclone,rclone的vfs缓存支持按大小和扩展名过滤,但是这个过滤参数是全局的。
我通过四步实现分流。
1、rclone批量下载小文件
2、rclone挂载小文件,加入大文件过滤
3、rclone挂载网盘,加入小文件过滤
4、rclone union以上两个挂载,形成新的挂载,这个挂载就是带文件分流的。
以上步骤操作比较繁琐,能集成到软件里更好。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants