9#include "Misc/FileHelper.h"
11#include "Misc/Paths.h"
12#include "GenericPlatform/GenericPlatformHttp.h"
30 Boundary = TEXT(
"----UE_Multipart_") + FGuid::NewGuid().ToString(EGuidFormats::Digits);
41 TArray<uint8> FileBytes;
42 if (!FFileHelper::LoadFileToArray(FileBytes, *FilePath))
44 UE_LOG(LogTemp, Warning, TEXT(
"[HttpMultipartFormData] Failed to load file: %s"), *FilePath);
48 FString FileNameOnly = FPaths::GetCleanFilename(FilePath);
51 FileParts.Add({ FieldName, FileNameOnly, Mime, MoveTemp(FileBytes) });
62 Request->SetHeader(TEXT(
"Content-Type"),
63 TEXT(
"application/x-www-form-urlencoded"));
68 Request->SetHeader(TEXT(
"Content-Type"),
69 FString::Printf(TEXT(
"multipart/form-data; boundary=%s"), *
Boundary));
85 TArray<FString> Pairs;
88 FString EncodedKey = FGenericPlatformHttp::UrlEncode(P.Name);
89 FString EncodedValue = FGenericPlatformHttp::UrlEncode(P.Value);
90 Pairs.Add(FString::Printf(TEXT(
"%s=%s"), *EncodedKey, *EncodedValue));
93 FString Body = FString::Join(Pairs, TEXT(
"&"));
98 auto Add = [](TArray<uint8>& Dest,
const FString& S)
103 const FString LineEnd = TEXT(
"\r\n");
104 const FString BoundaryLine = TEXT(
"--") +
Boundary;
111 TEXT(
"Content-Disposition: form-data; name=\"%s\"%s"),
122 TEXT(
"Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"%s"),
123 *P.Name, *P.FileName, *LineEnd));
125 TEXT(
"Content-Type: %s%s"),
126 *P.MimeType, *LineEnd));
137 Add(
BuiltBody, BoundaryLine + TEXT(
"--") + LineEnd);
143 FTCHARToUTF8 Conv(*Str);
144 Dest.Append(
reinterpret_cast<const uint8*
>(Conv.Get()), Conv.Length());
149 const FString Ext = FPaths::GetExtension(FileName,
false).ToLower();
152 if (Ext == TEXT(
"mp3"))
return TEXT(
"audio/mpeg");
153 if (Ext == TEXT(
"wav"))
return TEXT(
"audio/wav");
154 if (Ext == TEXT(
"ogg"))
return TEXT(
"audio/ogg");
155 if (Ext == TEXT(
"flac"))
return TEXT(
"audio/flac");
156 if (Ext == TEXT(
"m4a"))
return TEXT(
"audio/mp4");
158 if (Ext == TEXT(
"txt"))
return TEXT(
"text/plain");
159 if (Ext == TEXT(
"json"))
return TEXT(
"application/json");
162 return TEXT(
"application/octet-stream");