UE4如何上传文件

上传文件示例代码

/*
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--



版权声明:本文为yb0022原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。