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

应用不支持MultipartEntityBuilder,JSR223 Sampler上传DICOM文件失败如何解决?

解决JSR223 Sampler上传DICOM文件时应用不支持multipart entity的问题

问题描述

我尝试通过JSR223 Sampler执行以下脚本,在请求体中上传一张DICOM格式的图片文件,但由于我的应用不支持multipart entity,脚本执行失败。

原脚本:

import org.apache.http.HttpHeaders
import org.apache.http.client.methods.HttpPost
import org.apache.http.entity.ContentType
import org.apache.http.entity.mime.HttpMultipartMode
import org.apache.http.entity.mime.MultipartEntityBuilder
import org.apache.http.impl.client.HttpClients

def imageFileName = "C:\\Users\\IMAGES\\IMG00001.dcm"

def urlRequest = 'https://' + ${BASE_URL_1} + '/api/v3/storage/namespace/7c762733-009f-4527-81ea-571d1cf6e9d2/image?sid=' + vars.get('SIDVALUE') + '&study_uid=1.2.300.0.7230010.3.1.2.2595064201.8112.1216202112026121&image_uid=1.2.840.113704.7.1.0.1356918323635126.1521373008.110'

def postRequest = new HttpPost(urlRequest);
def file = new File(imageFileName);
def builder = MultipartEntityBuilder.create();

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("file", file, ContentType.DEFAULT_BINARY, imageFileName);
def entity = builder.build();
postRequest.setEntity(entity);

def header = new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/dicom");
def headers = Arrays.asList(header)
def client = HttpClients.custom().setDefaultHeaders(headers).build()

def response = client.execute(postRequest);

解决方案

由于目标应用不支持multipart格式,需直接将DICOM文件的二进制内容作为请求体发送,无需封装为multipart entity。修改后的脚本如下:

import org.apache.http.HttpHeaders
import org.apache.http.client.methods.HttpPost
import org.apache.http.entity.FileEntity
import org.apache.http.impl.client.HttpClients
import org.apache.http.message.BasicHeader

def imageFileName = "C:\\Users\\IMAGES\\IMG00001.dcm"

// 构建请求URL(修正变量引用方式,避免语法错误)
def urlRequest = 'https://' + vars.get('BASE_URL_1') + '/api/v3/storage/namespace/7c762733-009f-4527-81ea-571d1cf6e9d2/image?sid=' + vars.get('SIDVALUE') + '&study_uid=1.2.300.0.7230010.3.1.2.2595064201.8112.1216202112026121&image_uid=1.2.840.113704.7.1.0.1356918323635126.1521373008.110'

def postRequest = new HttpPost(urlRequest);
def file = new File(imageFileName);

// 直接将文件二进制内容作为请求实体,设置正确的Content-Type
def entity = new FileEntity(file, "application/dicom")
postRequest.setEntity(entity)

// 创建默认HTTP客户端并执行请求
def client = HttpClients.createDefault()
def response = client.execute(postRequest)

// 可选:打印响应状态码用于调试
log.info("请求响应状态码: " + response.getStatusLine().getStatusCode())

关键修改说明

  • 移除所有MultipartEntityBuilder相关代码,避免生成multipart格式请求体
  • 使用FileEntity直接封装DICOM文件的二进制内容,作为请求体发送
  • 修正BASE_URL_1的引用方式:原脚本直接使用${BASE_URL_1}会导致语法错误,改为vars.get('BASE_URL_1')通过JMeter变量管理器获取值
  • 简化HTTP客户端创建逻辑,若需自定义请求头可保留原方式,但此处Content-Type已通过FileEntity直接设置

内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:10:50