UE4如何上传文件

2023-11-17

上传文件示例代码

/*
InUrl为上传URL
InFiles为本地文件路径的数组
Boundary为分隔符,用来分隔文件,其他地方不能出现该字符串,每个文件都以"\r\n--"+Boundary+"\r\n"开始(即BeginBoundry)
分隔符之后是文件头(FileHeader),文件头中name为文件域,这里用"file[]",[]表示上传多个文件,如果是一个文件可去掉[];filename为文件名,这里用本地文件名;文件头以两个换行符(\r\n\r\n)结束
文件头之后紧跟文件内容
所有文件内容都读出之后,最后以"\r\n--"+Boundary+"--\r\n"结束
*/
bool UploadFiles(const FString& InUrl,const TArray<FString>& InFiles)
{
	TSharedRef<IHttpRequest> HttpRequest = FHttpModule::Get().CreateRequest();
	HttpRequest->SetURL(InUrl);

	FString Boundary = "---------------------------" + FString::FromInt(FDateTime::Now().GetTicks());//分隔符
	HttpRequest->SetHeader(TEXT("Content-Type"), TEXT("multipart/form-data; boundary =" + Boundary));//请求头,数据格式必须是multipart/form-data
	HttpRequest->SetVerb(TEXT("POST"));

	TArray<uint8> UploadContent;
	for (const FString& FilePath : InFiles)
	{
		TArray<uint8> ArrayContent;
		if (FFileHelper::LoadFileToArray(ArrayContent, *FilePath))
		{
			FString BeginBoundry = "\r\n--" + Boundary + "\r\n";
			UploadContent.Append((uint8*)TCHAR_TO_ANSI(*BeginBoundry), BeginBoundry.Len());

			FString FileHeader = "Content-Disposition: form-data;";//文件头
			FileHeader.Append("name=\"file[]\";");
			FileHeader.Append("filename=\"" + FPaths::GetCleanFilename(FilePath) + "\"");
			FileHeader.Append("\r\nContent-Type: \r\n\r\n");
			UploadContent.Append((uint8*)TCHAR_TO_ANSI(*FileHeader), FileHeader.Len());

			UploadContent.Append(ArrayContent);
		}
	}
	FString EndBoundary = "\r\n--" + Boundary + "--\r\n";//结束符
	UploadContent.Append((uint8*)TCHAR_TO_ANSI(*EndBoundary), EndBoundary.Len());
	HttpRequest->SetContent(UploadContent);
	return HttpRequest->ProcessRequest();
}

最终的上传内容类似于以下格式:


------------------------------1498579920
Content-Disposition: form-data;name="files[]";filename="A1.png"
Content-Type: 


{文件内容}
------------------------------1498579920
Content-Disposition: form-data;name="files[]";filename="A2.png"
Content-Type: 


{文件内容}
------------------------------1498579920
Content-Disposition: form-data;name="files[]";filename="A3.png"
Content-Type: 


{文件内容}
------------------------------1498579920--


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE4如何上传文件 的相关文章

  • Pocket Yoga for mac:一个神奇的瑜伽助手,让你的身心更健康

    Pocket Yoga for Mac 口袋瑜伽 是一款专为瑜伽爱好者设计的应用程序 无论您是初学者还是经验丰富的瑜伽修行者 这款应用都能帮助您在家中或办公室进行高效的瑜伽练习 Pocket Yoga for Mac提供了一系列的瑜伽课程和
  • Integer、new Integer、int之间的区别与比较

    最近面试代码分析题频繁遇到 所以就此做一个整理与回顾 希望能帮到大家 如有错误欢迎纠正 这里先说一下这三种类型分别是什么 int int是java中的一种基本数据类型默认值为0 Integer int的包装类 默认值为null new In
  • flask框架和配置

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 flask框架介绍 flsak框架的安装 实现Flask基本操作 Flask的配置 flask框架介绍 Flask诞生于2010年 使用python语言基于Werk
  • 通过 docker-compose 搭建高可用 nginx + keepalived 集群

    目录 1 搭建环境 2 Keepalived介绍 3 搭建步骤 1 搭建环境 两台虚拟机 CentOS Linux release 7 9 2009 Core Docker version 23 0 1 Docker compose ver
  • 小知识记录

    1 加URL地址栏上的图标 在jsp文件中写 在webroot下加入此图片 并且把名字换成 favicon ico 2 处理并发 读一致性 隔离级别 脏读 不可重复读 幻影读 同步锁 乐观锁 数据版本 Version 记录机制实现 悲观锁
  • 一文弄懂Ubuntu安装配置方法(挂载、SSH、用户管理)

    Ubuntu安装配置方法 挂载 SSH 用户管理 这篇文章是本人使用Ubuntu四年来 对常用操作的总结 需要的同学可以保存备用 安装Ubuntu U盘安装 注意安装英文版的为佳 挂载分区 最好切换到root 确定要挂载的分区和目录 查看已
  • 设计数组工具类、日期工具类;线程模拟多窗口售票流程;总结内部类访问方式;区分数值和字符串并排序;猜四位数小游戏

    文章目录 1 设计可存储不同长度 兼容多种类型数组工具类 2 控制台随机输入数值或字符串 区分出数值和字符串 从小到大输出 要求 个数 类型不限 去除重复 3 设计日期工具类 兼容jdk5 8 4 总结内部类访问方式 内部类特性 静态内部类
  • python自己写包_自己写python包

    广告关闭 腾讯云11 11云上盛惠 精选热门产品助力上云 云服务器首年88元起 买的越多返的越多 最高返5000元 packages find packages exclude tests exmaple 所有包除了tests和exmapl
  • Docker容器与虚拟化技术:GitHub账户注册

    目录 一 实验 1 GitHub 一 实验 1 GitHub 1 GitHub是一个面向开源及私有软件项目的托管平台 因为只支持Git作为唯一的版本库格式进行托管 故名GitHub 2 官网 GitHub Let s build from
  • ArcGIS构建缓冲区,合并两个重叠的面

    问题描述 需要构建线缓冲区 并将重叠的缓冲区合并成一个面要素 不相邻的不需要合并 解决思路 构建缓冲区 并进行融合 相关工具描述 ArcMap提供的缓冲区 buffer 工具 融合类型有三种 但ALL不能满足需求 联合 Union 工具 会
  • 集成FCM推送一系列问题

    FCM Firebase Cloud Messaging 首先集成FCM需要一定的条件 必要条件 Android2 3版本以上的手机和拥有Google service的框架应用和不在国内的网络 使用外网 第一国内的手机一般阉割了Google

随机推荐

  • 教你用Python爬网站数据,并用BI可视化分析!

    两年时间里曾经换过一份工作 一直都是从事大数据相关的行业 目前是一家企业的BI工程师 主要工作就是给业务部门出报表和业务分析报告 回想自己过去的工作成绩也还算是不错的 多次通过自己分析告 解决了业务的疑难杂症 领导们各种离不开 但安逸久了总
  • C++17新特性之try_emplace与insert_or_assign

    由于std map中 元素的key是唯一的 我们经常遇到这样的场景 向map中插入元素时 先检测map指定的key是否存在 不存在时才做插入操作 如果存在 直接取出来使用 或者key不存在时 做插入操作 存在时做更新操作 通用的做法 可以直
  • Sqoop脚本调用

    在生产环境中 肯定不能直接去跑命令 需要使用脚本文件 然后定时执行脚本文件即可 cd usr hdk mkdir job cd job vi RDBMS2HDFS opt import connect jdbc mysql hadoop01
  • blender基础入门 / 操作快捷键

    鼠标停留在工具按钮上 按F1 打开官网在线帮助 基本显示 操作框放大缩小 T 显示 隐藏左侧工具栏 基本信息侧边栏Sidebar 展开 弹出 快捷键N 模型比例1 1 保持自身比例数据 模型游标轴点中心点设置位置 游标模式 shift C游
  • Apache下 FastCGI 配置小结

    http hi baidu com clusterlee item aa9a122c84cf94d40e37f985 一 下载 FastCGI模块 http www fastcgi com dist mod fastcgi 2 4 6 ta
  • 知识蒸馏综述:代码整理

    GiantPandaCV导语 收集自RepDistiller中的蒸馏方法 尽可能简单解释蒸馏用到的策略 并提供了实现源码 1 KD Knowledge Distillation 全称 Distilling the Knowledge in
  • 简单使用easyExcel实现对excel读和写操作

    1 引入依赖 easyexcel底层封装了poi所以必须引入poi而且版本需要进行对应如下
  • Python报错:requests.exceptions.SSLError: HTTPSConnectionPool(host=‘huggingface.co‘, port=443): Max ret

    1 Python报错 2 解决方法 出现问题的原因是运行程序的时候没有联网 但是使用了未下载的bert base chinese模型 我们可以将模型手动下载 然后放入到对应文件夹即可 3 下载bert base chinese模型 首先进入
  • java 字符串包含_java判断字符串包含某个字符的实例方法

    java判断字符串是否包含某个字符的方法 一 contains方法 1 描述 java lang String contains 方法返回true 当且仅当此字符串包含指定的char值序列 2 声明 public boolean conta
  • uc浏览器显示服务器错误,使用UC浏览器打开网页报错,无法播放优酷官网视频...

    适用产品 HUAWEI MateBook 13 2021款intel i7 8g 512g 集显 触屏 2020 锐龙版 amd r5 16g 512g 集显 锐龙版2020款 amd r5 8g 512g 集显 触屏 2021款 inte
  • 机器学习学习笔记——数据集划分(留出法)

    编译工具 pycharm 学习工具 Anaconda notebook 在机器学习算法中 我们通常将原始数据集划分为三个部分 划分要尽可能保持数据分布的一致性 1 Training set 训练集 训练模型 2 Validation set
  • 使用shell(sh)文件批量修改文件的权限

    最近在www coolketang com上实现了苹果移动端互动教程的Web化 但是课程资料在上传到云服务器时 总是出现权限问题 而无法打开 所以写了个脚本 在上传服务器之前 批量修改资源的权限 代码较少 可以直接阅读 编辑完保存为 sh文
  • 最强自动化测试框架Playwright (27)-跟踪查看器

    Playwright Trace Viewer 是一个 GUI 工具 可帮助您在脚本运行后探索记录的 Playwright 跟踪 可以本地打开 也可以在trace playwright dev 打开 录制跟踪文件 使用context tra
  • 在物联网中应用机器学习

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由未来守护者发表于云 社区专栏 本项目探讨如何将机器学习 Machine learning 应用到物联网 IoT Internet of Things 中 我们将使用 Andro
  • 关于数据分析流程详解

    在数据分析过程中 主要是以下几个过程 一 明确分析目的 首先要明确自己的分析目的 只有明确目的的分析才能更有效的解决自己的问题 打到自己的目的 大量数据 试探性的分析除外 但是即使是试探性的分析过程 前期也是需要一个假设的分析目的的 二 数
  • split()正则表达式按照长度切割

    String split s s length 2 gt 0 split lt G 2 正则表达式匹配 按2位长度分割
  • 期货止损篇1:固定点数止损真的好用,只是90%的人都用错了

    最近问到止损的朋友比较多 这个系列跟大家分享下个人对于止损的一些看法 每个人刚入市的时候 最常听到的就是固定点数止损 比如固定3个点止损 固定10个点止损 固定20个点止损 固定50个点止损 用久了 很多人就抱怨这个方法不靠谱 大师是不是留
  • Keil报错 requires ANSI-style prototype

    在进行模块化程序设计时遇到这种error 这是头文件没有定义的问题 首先在同一个目录下建立一个 h文件 第二步打开文件 进行编辑 要用到 ifndef define endif 这是为了避免重复定义 ifndef后面跟的是头文件名称的大写
  • matlab 浅浅实现随机森林(Random forest)算法对高光谱图像数据进行分类,输出分类结果图和精度评价

    利用随机森林 Random forest 算法对数据进行分类 输出分类结果图 利用验证样本集计算出分类结果的混淆矩阵 输出分类结果的整体分类精度 和每一类地 物的分类精度 emmm不要对下面的内容报有太大的期待 要求使用随机森林算法 我尝试
  • UE4如何上传文件

    上传文件示例代码 InUrl为上传URL InFiles为本地文件路径的数组 Boundary为分隔符 用来分隔文件 其他地方不能出现该字符串 每个文件都以 r n Boundary r n 开始 即BeginBoundry 分隔符之后是文