JMeter目录上传失败求助:文件名路径丢失异常
解决JMeter批量上传文件时文件名路径被截断的问题
我之前也碰到过一模一样的问题——JMeter总是把filename里的路径部分砍掉,导致服务器识别不了文件,上传直接失败。咱们来一步步搞定它:
问题根源
JMeter的HTTP请求组件默认会自动从你填写的File Path里提取纯文件名(去掉路径),哪怕你手动在File Name字段填了带路径的内容,它也会偷偷覆盖或者截断,这就是你看到路径消失的原因。
两种可行解决方案
方案一:用JSR223前置处理器强制设置完整文件名
这个方法适合用CSV批量读取文件路径的场景,能保留完整路径作为filename:
先配置CSV数据源
- 创建一个CSV文件,每行写一个完整的文件路径,比如:
Actress/tatiana maslany/30_612x344_tatiana_maslany_sarah_orphanblack.jpg Actress/tatiana maslany/another_photo.jpg - 添加
CSV Data Set Config,把CSV路径填进去,变量名设为file_path(方便后续引用),分隔符留空就行。
- 创建一个CSV文件,每行写一个完整的文件路径,比如:
配置HTTP请求
- 在HTTP请求的
Files Upload部分:File Path填${file_path}Parameter Name填file(和服务器要求的参数名一致)MIME Type填image/jpegFile Name字段留空,我们后面用脚本修改。
- 在HTTP请求的
添加JSR223前置处理器
- 给HTTP请求加一个
JSR223 PreProcessor,粘贴下面的代码:import org.apache.jmeter.protocol.http.multipart.FilePart; def arguments = sampler.getArguments(); for (int i = 0; i < arguments.getArgumentCount(); i++) { def arg = arguments.getArgument(i); if (arg instanceof FilePart) { FilePart filePart = (FilePart) arg; // 强制设置filename为完整路径 filePart.setFileName(vars.get("file_path")); } }
这段代码会找到请求里的文件上传参数,把filename改成我们从CSV里拿到的完整路径。
- 给HTTP请求加一个
方案二:手动构造Raw请求内容
如果不想用脚本,也可以直接写原始的multipart请求体,完全控制每个部分:
配置HTTP请求
- 方法选POST,填好目标URL。
- 打开
Body Data标签,手动构造请求内容:------aiYHC13zS69CLqZX Content-Disposition: form-data; name="file"; filename="${file_path}" Content-Type: image/jpeg ${__FileToString(${file_path},,)} ------aiYHC13zS69CLqZX-- - 注意:把
${file_path}换成你实际的变量名,边界字符串aiYHC13zS69CLqZX要和请求头里的一致。
添加请求头
- 给HTTP请求加一个
HTTP Header Manager,添加Content-Type头:Content-Type: multipart/form-data; boundary=aiYHC13zS69CLqZX
- 给HTTP请求加一个
验证结果
设置好之后,用View Results Tree查看请求的实际内容,确认filename部分是完整的路径,再跑测试应该就能成功上传了。
内容的提问来源于stack exchange,提问作者alperenbekci
相关产品推荐
相关产品推荐

