使用UE4 HttpRequest提交多表单

大部分HTTP库都是支持直接设置多表单字段的,但UE4的HttpRequest比较惨,只能用SetContent设置整个的TArray<uint8>作为请求体,所以想要传多表单就要自己拼。

首先设置Header,Content-Type设置为多表单,并设置boundary:

cpp 复制代码
auto HttpRequest = FHttpModule::Get().CreateRequest();
HttpRequest->SetHeader("Content-Type", TEXT("multipart/form-data; boundary=yourboundary"));
HttpRequest->SetURL(yourUrl);
HttpRequest->SetVerb("POST");

boundary想设什么都行,但要和后面用的统一。

然后拼请求体的数据字段部分:

cpp 复制代码
FString RequestBody;
FString Boundary = TEXT("--yourboundary\r\nContent-Disposition: form-data; name=");
//拼入单个属性
FString Field = Boundary + TEXT("\"") + Key + TEXT("\"\r\n\r\n") + Value + TEXT("\r\n");
RequestBody += Field;

这里需要注意,分隔两个属性的boundary行要比Header里设置的boundary前面多两个横杠

然后拼入文件:

cpp 复制代码
RequestBody += TEXT("--yourboundary\r\nContent-Disposition: form-data; name=\"file\"; "); //分隔行和前缀
RequestBody += TEXT("filename=\"") + FileName + TEXT("\"\r\n\r\n"); //文件名
RequestBody += FString::FromBlob(Buffer.GetData(), Buffer.Num()); //文件
RequestBody += TEXT("\r\n--yourboundary--\r\n"); //结尾分隔行

结尾分隔行最后要有两个横杠。

然后把请求体设置进去,就可以传了:

cpp 复制代码
	HttpRequest->SetContentAsString(RequestBody);
	HttpRequest->OnProcessRequestComplete().BindLambda([](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bSuccess)
		{
			if (Response.IsValid())
			{
				FString ResponseStr = Response->GetContentAsString();
				UE_LOG(LogTemp, Warning, TEXT("Upload Response: %s"), *ResponseStr);
			}
			else
			{
				UE_LOG(LogTemp, Error, TEXT("Upload failed"));
			}
		});
	HttpRequest->ProcessRequest();
相关推荐
谷哥的小弟几秒前
TypeScript在Vue3中的常见写法
前端·javascript·typescript
人间凡尔赛12 分钟前
2026 前端全栈新范式:Server Actions + Edge Runtime,告别传统 API 路由
前端·全栈·next.js
码林鼠3 小时前
2026前端面试题(二)
前端
满栀5854 小时前
请求拦截、响应拦截、业务错误统一处理
前端·typescript·anti-design-vue
宿6745 小时前
tsconfig.node.json
前端·javascript·vue.js
小杨互联网5 小时前
Cursor 前端 Dist 自动化逆向框架:/fr 流水线 · 4 脚本 · Vite/Webpack
前端·webpack·自动化·前端逆向框架·ai前端逆向框架
瑞码空间6 小时前
Web应用的多端部署之道:浏览器 · Electron · Docker
前端·docker·electron·浏览器·web
徐奥雯XUAOWEN6 小时前
Codex官网前端可抄吗?从技术视角深度解析与借鉴指南
前端
文艺理科生6 小时前
3 年,8 种方案,1 次重构:LangChain 记忆方案如何从混乱走向清晰
前端·后端·架构
huabuyu6 小时前
SourceMap:从「看不懂线上报错」到「让 AI 定位真根因」
前端·javascript