You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter无法向ASP.NET应用上传文件[Telerik RadAsyncUpload问题]

针对Telerik RAD Rau异步文件上传的JMeter脚本解决方案

1. 还原RadAsyncUpload的真实请求逻辑

RadAsyncUpload的上传是分阶段的,不是直接提交文件:

  • 第一步:发送预检POST请求(通常指向rau.axd这类路径),获取上传必需的元数据,比如RadUploadID、ChunkIndex、TotalChunks、加密参数等
  • 第二步:按服务端要求的规则(小文件单块上传,大文件分片),直接发送文件原始二进制内容,同时携带第一步拿到的所有元数据参数

你之前转Base64、十六进制的操作会破坏文件原始字节结构,这就是上传后图片损坏的核心原因,必须直接传输文件的原始二进制流。

2. JMeter中正确配置上传请求

  • 放弃默认文件上传组件的自动编码逻辑,手动配置:
    • 请求方法设为POST,路径对应抓包到的RadAsyncUpload处理路径(如/rau.axd)
    • 在「参数」面板添加所有从预检请求解析到的元数据参数(比如RadUploadID、FileName、ContentLength、ChunkIndex等),参数名、值要和浏览器请求完全一致
    • 在「请求体」部分选择「使用文件作为请求体」,直接选中目标图片文件,不要勾选任何编码选项,确保发送原始二进制数据
    • 复制浏览器上传请求的所有请求头,比如Content-Type(设为对应文件MIME类型,如image/jpeg)、X-Requested-With、User-Agent等,确保头信息完全匹配

3. 处理分片上传场景

如果是大文件,RadAsyncUpload会自动分片,需按以下步骤处理:

  • 从预检请求响应中解析出TotalChunks(总分片数)和ChunkSize(单分片大小)
  • 用JMeter的循环控制器循环TotalChunks次,每次循环内:
    • 计算当前ChunkIndex(从0开始计数)
    • 通过BeanShell/JS233脚本截取文件对应分片的二进制内容(不要用字符串转换工具,避免破坏字节)
    • 上传请求携带对应的ChunkIndex、TotalChunks参数,发送该分片的二进制数据

4. 验证请求一致性

用Chrome开发者工具或Fiddler抓包浏览器的真实上传请求,和JMeter请求做逐项对比:

  • 检查所有请求参数的名称、值、大小写是否完全一致
  • 核对请求头,尤其是Content-Length要和当前上传的文件/分片字节数匹配
  • 用十六进制对比工具,确认JMeter发送的文件字节流和浏览器发送的完全一致

5. 常见坑点排查

  • 绝对不要对文件内容做任何编码转换(Base64、十六进制都会破坏原始文件结构)
  • 确保元数据中的FileName包含正确后缀(如test.png),否则服务端可能无法识别文件类型
  • 如果响应中的JSON是加密的,必须确保解密后的参数值完全正确,且上传请求中准确传递

内容的提问来源于stack exchange,提问作者Performance Tester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:12:08