Skip to content

fix(drivers/ftp): add cwd_list option and filter path-separated entries#2621

Open
sorubedo wants to merge 1 commit into
OpenListTeam:mainfrom
sorubedo:main
Open

fix(drivers/ftp): add cwd_list option and filter path-separated entries#2621
sorubedo wants to merge 1 commit into
OpenListTeam:mainfrom
sorubedo:main

Conversation

@sorubedo

@sorubedo sorubedo commented Jun 15, 2026

Copy link
Copy Markdown

Summary / 摘要

修复 GBK 编码 FTP 服务器(常见于学校/老旧中文环境)的两个兼容性问题:

  1. 新增 cwd_list 选项:启用后改用 CWD 进入目标目录再 LIST "" 列出内容,代替原有的 LIST <path> 方式。解决非 UTF-8 编码路径在 LIST 命令中无法正确解析,导致列表只显示一个与当前目录同名假文件夹的问题。

  2. 过滤含 / 的文件名:部分 FTP 服务器返回的列表包含 type=cdir(当前目录标记)等特殊条目,其 Name 字段为完整路径格式(含 /)。由于 FTP 协议中合法文件名不可能包含路径分隔符,借此安全过滤此类条目。

用户可感知的变化

  • FTP 存储添加页面新增 cwd_list 开关(默认关闭)
  • 部分 FTP 服务器不再显示 |路径|路径 格式的假文件夹条目

实现变化

  • drivers/ftp/meta.go:Addition 结构体新增 CwdList bool 字段

  • drivers/ftp/driver.go:List 方法根据 CwdList 选项切换列目录策略;新增 strings.Contains(entry.Name, "/") 过滤

  • This PR has breaking changes.
    / 此 PR 包含破坏性变更。

  • This PR changes public API, config, storage format, or migration behavior.
    / 此 PR 修改了公开 API、配置、存储格式或迁移行为。

  • This PR requires corresponding changes in related repositories.
    / 此 PR 需要关联仓库同步修改。

Related repository PRs / 关联仓库 PR:

  • OpenList-Frontend:
  • OpenList-Docs:

Related Issues / 关联 Issue

(如有相关 Issue 请填写,否则删除本节)

Testing / 测试

  • go test ./...
  • Manual test / 手动测试:

手动测试环境:

  • FTP 服务器:学校 GBK 编码 FTP 服务器
  • 测试场景 1(cwd_list 关闭,默认行为):行为与修复前一致,UTF-8 服务器正常工作
  • 测试场景 2(cwd_list 开启,GBK 服务器):原本只显示一个假文件夹的目录现在正确列出所有文件和子目录,可正常进入子目录
  • 测试场景 3(cdir 条目过滤):原本显示 |路径|路径 的假文件夹不再出现

Checklist / 检查清单

  • I have read CONTRIBUTING.
    / 我已阅读 CONTRIBUTING
  • I confirm this contribution follows the repository license, contribution policy, and code of conduct.
    / 我确认此贡献符合仓库许可证、贡献规范和行为准则。
  • I have formatted the changed code with gofmt, go fmt, or prettier where applicable.
    / 我已按适用情况使用 gofmtgo fmtprettier 格式化变更代码。
  • I have requested review from relevant maintainers or code owners where applicable.
    / 我已在适用情况下请求相关维护者或代码所有者审查。

AI Disclosure / AI 使用声明

  • This PR includes AI-assisted content.
    / 此 PR 包含 AI 辅助内容。

Tools used / 使用工具:

  • ChatGPT
  • Codex
  • GitHub Copilot
  • Claude
  • Gemini
  • Other (please specify) / 其他(请注明):

Usage scope / 使用范围:

  • Code generation / 代码生成

  • Refactoring / 重构

  • Documentation / 文档

  • Tests / 测试

  • Translation / 翻译

  • Review assistance / 审查辅助

  • I have reviewed and validated all AI-assisted content included in this PR.
    / 我已审核并验证此 PR 中的所有 AI 辅助内容。

  • I have ensured that all AI-assisted commits include Co-Authored-By attribution.
    / 我已确保所有 AI 辅助提交都包含 Co-Authored-By 归属信息。

  • I can reproduce all AI-assisted content included in this PR without any AI tools.
    / 我可以在没有任何 AI 工具的情况下重现此 PR 中包含的所有 AI 辅助内容。

@sorubedo

Copy link
Copy Markdown
Author

修复前的重复目录:
Screenshot_20260615-214010_Fulguris

Screenshot_20260615-214029_Fulguris

修复后新增的选项:
Screenshot_20260615-214129_Fulguris
i18n是要在前端改吧?

Screenshot_20260615-214230_Fulguris~2

@jyxjjj

jyxjjj commented Jun 15, 2026

Copy link
Copy Markdown
Member

i18n会自动生成

@jyxjjj

jyxjjj commented Jun 15, 2026

Copy link
Copy Markdown
Member

你这个命名不太对,自动生成估计翻译不来

@sorubedo

sorubedo commented Jun 15, 2026

Copy link
Copy Markdown
Author

你这个命名不太对,自动生成估计翻译不来

UseCwdToList bool json:"use_cwd_to_list" type:"bool" default:"false" help:"enter directory before listing"
或者 ​CwdBeforeList ?
这样可以吗

@jyxjjj

jyxjjj commented Jun 15, 2026

Copy link
Copy Markdown
Member

json里用啥都行,只是个配置,但是机翻cwd很有问题。
你还不如撤回呢。
我觉得没必要改,反正可以人工修crowdin,但是crowdin好像要合并以后才能有,我联系下相关人。

@ILoveScratch2

Copy link
Copy Markdown
Member

json里用啥都行,只是个配置,但是机翻cwd很有问题。
你还不如撤回呢。
我觉得没必要改,反正可以人工修crowdin,但是crowdin好像要合并以后才能有,我联系下相关人。

好像确实是作为裸字段名直接机翻会有问题,不过去OpenList-Frontend直接改drivers.json其实也行

@xrgzs xrgzs changed the title fix(ftp): add cwd_list option and filter path-separated entries fix(drivers/ftp): add cwd_list option and filter path-separated entries Jun 17, 2026
@xrgzs xrgzs added the Module: Driver Driver-Related Issue/PR label Jun 17, 2026
@xrgzs

xrgzs commented Jun 18, 2026

Copy link
Copy Markdown
Member

@sorubedo OpenList-Docs 文档麻烦加一下。

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

Labels

Module: Driver Driver-Related Issue/PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants