# v0 上传文件夹：保留子目录路径，区分同名文件与重复内容

浏览器真实目录File输入保留五条路径、四份内容，同名不覆盖，重复内容仍保留独立路径。

## 环境



## 启动

~~~sh
cd reference
python3 -m http.server 8787
~~~

## 七步操作

1. 准备嵌套目录

输入有三层子目录和五个原创文本文件。docs/a.txt 与 archive/a.txt 同名但内容不同，另一份 copy.txt 与 docs/a.txt 内容相同。

2. 启用目录选择

使用 input type=file、webkitdirectory 和 multiple，让浏览器真正返回 File 对象。测试直接选择练习目录，没有人工伪造 webkitRelativePath。

3. 读取相对路径

逐个读取 webkitRelativePath、size 和原始字节，路径保留顶层目录与子目录。不能只用 File.name，否则同名项会覆盖或消失。

4. 比较同名文件

切换“同名不同内容”视图，核对两条 a.txt 各有独立相对路径与不同SHA前缀。哈希完整值在下载记录中，页面只展示可读前缀。

5. 识别重复内容

切换“异名相同内容”，对同哈希的两条路径做提示。重复内容不等于允许自动删除；本题保留所有五条路径，不写用户磁盘。

6. 保存路径清单

全量清单应有五条独立路径、四份独立内容。导出时以相对路径为键，既保留目录结构，也能发现内容去重机会。

7. 复跑目录输入

重新选择同一练习目录，比对路径集合与哈希。使用v0实现自己的界面时保留这些合同；作者本地浏览器已运行，v0云平台生成会话未运行。

## 目录身份

- starter：待完成的任务接口与原创输入，TODO不是已完成实现。
- reference：作者原生完成参考和实际产物。records.json/browser-result.json为本地实测记录，不是AI助手回复。
- TASK.md：可交给相应AI助手的原始任务合同。该助手账号生成会话未运行。

## 依赖与许可

原创教学代码以MIT许可提供。第三方项目、模型及浏览器遵循其自身许可。第三方依赖由本地安装获取，不包含node_modules、模型权重、WASM运行时、数据库、缓存或凭据。

## 官方依据

- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory
