Postman本身不校验文件内容,仅发送二进制流;后端能否识别重复完全取决于其实现逻辑,如是否计算MD5/SHA256或仅比对文件名。

Postman 重复上传同一文件时后端是否真能识别
不能默认认为“上传同名文件就等于重复”,Postman 本身不校验文件内容,它只负责把选中的文件二进制流发出去。后端能否识别重复,完全取决于接口实现逻辑——比如是否计算 md5、sha256,或仅比对 filename 字段。
实操建议:
- 先确认接口文档是否声明了“去重策略”(如“相同 MD5 返回 409 Conflict”)
- 用 Postman 发两次同一文件,对比响应体中
data.file路径是否一致;若路径不同,说明后端未做内容去重 - 若需验证内容级去重,手动用命令行算哈希:
shasum -a 256 your_file.jpg,再和后端返回的file_hash字段比对
form-data 中 file 字段重复添加的后果
Postman 的 form-data 编辑器不允许多个 key 都叫 file —— 它会自动覆盖,只保留最后一个。这不是 bug,是 HTTP 协议限制:multipart/form-data 同名字段在解析时通常被取最后一个值(取决于后端框架,如 Express 默认如此,Django 可能收为列表)。
常见错误现象:
- 本想传两个文件,但只看到一个出现在后端
request.files中 - 响应里
data.count始终是 1,无论点几次 “Select Files”
正确做法:
- 多文件必须用不同 key,例如
file1、file2,或统一用数组式命名:file[](注意中括号是字面量,不是语法糖) - 如果后端约定接收
file[],Postman 中 key 填file[],value 类型选File,再点 “Select Files” 就可多选 - 别依赖 UI 上“+”号加多行——那只是多个独立字段,不是数组
如何用 Postman 模拟“秒级连续上传”验证并发重复
单次手工点击 Send 无法测出竞态条件下的重复保存问题。真实场景中,前端可能因用户误点或网络抖动,在极短时间内发出两个几乎相同的上传请求。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
实操建议:
- 把该请求保存进一个 Collection,用
Collection Runner设置迭代次数为 2,延迟为0ms - 在 Tests 标签页加断言,检查两次响应的
data.file是否相同:pm.test("Same file path on rapid upload", function () { const jsonData = pm.response.json(); const filePath = jsonData.data?.file; pm.environment.set("first_path", pm.environment.get("first_path") || filePath); pm.expect(filePath).to.eql(pm.environment.get("first_path")); }); - 若断言失败,说明后端没加分布式锁或事务隔离,存在重复写入风险
文件名相同但内容不同,Postman 怎么快速构造差异样本
测试“同名不同内容是否被当作重复”时,手动改文件名太慢。更高效的方式是用 Postman 的 pre-request script 动态注入时间戳到文件名里,绕过后端仅靠 filename 判断的逻辑。
操作步骤:
- 在请求的 Pre-request Script 标签页粘贴:
const fileName = `test_${Date.now()}.png`; pm.environment.set("upload_filename", fileName); - Body → form-data → key 填
file,value 类型选File,然后点 “Select Files” 选任意 PNG 文件 - 关键:在 Headers 添加
Content-Disposition头,值设为form-data; name="file"; filename="{{upload_filename}}"(部分后端如某些 PHP 环境会读这个头来覆盖原始文件名) - 这样每次 Send 都生成新文件名,便于观察后端是否真的按内容去重
真正容易被忽略的是:很多后端根本没校验文件内容,只截取 filename 后缀做类型判断,再拼个 UUID 当存储名——这种情况下,“重复上传”测试其实是在验证你自己的假设是否成立,而不是后端能力。










