Skip to content

fix(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(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其实也行

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants