KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
FHttpMultipartFormData 클래스 참조

언리얼 엔진에 기본 제공되지 않는 multipart/form-data 빌더의 경량 구현입니다. 더 자세히 ...

#include <FHttpMultipartFormData.h>

+ FHttpMultipartFormData에 대한 협력 다이어그램:

클래스

struct  FFilePart
 
struct  FTextPart
 

Public 멤버 함수

 FHttpMultipartFormData (EFormDataType Type=EFormDataType::Multipart)
 FormData 객체를 생성합니다.
 
bool AddFile (const FString &FieldName, const FString &FilePath, const FString &MimeType=TEXT(""))
 파일 데이터를 multipart 본문에 추가합니다.
 
FORCEINLINE void AddStringField (const FString &FieldName, const FString &Value)
 문자열 필드를 추가하는 편의 래퍼입니다.
 
void AddText (const FString &FieldName, const FString &Value)
 간단한 텍스트 필드를 추가합니다.
 
const FString & GetBoundary () const
 현재 사용 중인 경계 문자열입니다.
 
const TArray< uint8 > & GetBuiltBody () const
 직렬화된 multipart 본문 데이터입니다.
 
void Reset ()
 모든 파트를 제거하고 경계를 재생성합니다.
 
void SetupHttpRequest (const TSharedRef< IHttpRequest, ESPMode::ThreadSafe > &Request)
 HTTP 요청에 Content-Type 헤더와 본문을 설정합니다.
 

Private 멤버 함수

void BuildBody ()
 등록된 파트를 기반으로 HTTP 본문을 구성합니다.
 

정적 Private 멤버 함수

static void AppendUtf8 (TArray< uint8 > &Dest, const FString &Str)
 문자열을 UTF-8로 변환해 버퍼에 추가합니다.
 
static FString DetectMimeFromExtension (const FString &FileName)
 파일 확장자를 기반으로 MIME 타입을 추론합니다.
 

Private 속성

FString Boundary
 
TArray< uint8 > BuiltBody
 
TArray< FFilePartFileParts
 
EFormDataType FormDataType
 
TArray< FTextPartTextParts
 

상세한 설명

언리얼 엔진에 기본 제공되지 않는 multipart/form-data 빌더의 경량 구현입니다.

  • 경계(boundary)를 자동으로 생성합니다.
  • 텍스트 및 파일 필드를 추가할 수 있습니다.
  • RFC 7578 규격에 맞는 HTTP 본문을 생성합니다.

FHttpMultipartFormData.h 파일의 27 번째 라인에서 정의되었습니다.

생성자 & 소멸자 문서화

◆ FHttpMultipartFormData()

FHttpMultipartFormData::FHttpMultipartFormData ( EFormDataType  Type = EFormDataType::Multipart)

FormData 객체를 생성합니다.

매개변수
Type[in] 전송 방식 (기본값: Multipart)

FHttpMultipartFormData.cpp 파일의 14 번째 라인에서 정의되었습니다.

15 : FormDataType(Type)
16{
17 Reset();
18}
void Reset()
모든 파트를 제거하고 경계를 재생성합니다.

다음을 참조함 : Reset().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 함수 문서화

◆ AddFile()

bool FHttpMultipartFormData::AddFile ( const FString &  FieldName,
const FString &  FilePath,
const FString &  MimeType = TEXT("") 
)

파일 데이터를 multipart 본문에 추가합니다.

매개변수
FieldName[in] 폼 필드 이름입니다.
FilePath[in] 읽어올 파일 경로입니다.
MimeType[in] 명시적 MIME 타입(비어있으면 자동 추론)입니다.
반환값
파일 로드 및 추가에 성공하면 true입니다.

FHttpMultipartFormData.cpp 파일의 39 번째 라인에서 정의되었습니다.

40{
41 TArray<uint8> FileBytes;
42 if (!FFileHelper::LoadFileToArray(FileBytes, *FilePath))
43 {
44 UE_LOG(LogTemp, Warning, TEXT("[HttpMultipartFormData] Failed to load file: %s"), *FilePath);
45 return false;
46 }
47
48 FString FileNameOnly = FPaths::GetCleanFilename(FilePath);
49 FString Mime = InMimeType.IsEmpty() ? DetectMimeFromExtension(FileNameOnly) : InMimeType;
50
51 FileParts.Add({ FieldName, FileNameOnly, Mime, MoveTemp(FileBytes) });
52 return true;
53}
static FString DetectMimeFromExtension(const FString &FileName)
파일 확장자를 기반으로 MIME 타입을 추론합니다.
TArray< FFilePart > FileParts

다음을 참조함 : DetectMimeFromExtension(), FileParts.

다음에 의해서 참조됨 : UKLingoNetworkSystem::RequestChatAudio(), UKLingoNetworkSystem::RequestDailyAudio(), UKLingoNetworkSystem::RequestSpeakingJudges(), UKLingoNetworkSystem::RequestWriteSubmit().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ AddStringField()

FORCEINLINE void FHttpMultipartFormData::AddStringField ( const FString &  FieldName,
const FString &  Value 
)
inline

문자열 필드를 추가하는 편의 래퍼입니다.

FHttpMultipartFormData.h 파일의 40 번째 라인에서 정의되었습니다.

41 {
42 AddText(FieldName, Value);
43 }
void AddText(const FString &FieldName, const FString &Value)
간단한 텍스트 필드를 추가합니다.

다음을 참조함 : AddText().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ AddText()

void FHttpMultipartFormData::AddText ( const FString &  FieldName,
const FString &  Value 
)

간단한 텍스트 필드를 추가합니다.

매개변수
FieldName[in] 폼 필드 이름입니다.
Value[in] 필드에 저장할 문자열 값입니다.

FHttpMultipartFormData.cpp 파일의 34 번째 라인에서 정의되었습니다.

35{
36 TextParts.Add({ FieldName, Value });
37}
TArray< FTextPart > TextParts

다음을 참조함 : TextParts.

다음에 의해서 참조됨 : AddStringField(), UKLingoNetworkSystem::RequestChatAudio(), UKLingoNetworkSystem::RequestDailyAudio(), UKLingoNetworkSystem::RequestUserToken(), UKLingoNetworkSystem::RequestWriteSubmit().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ AppendUtf8()

void FHttpMultipartFormData::AppendUtf8 ( TArray< uint8 > &  Dest,
const FString &  Str 
)
staticprivate

문자열을 UTF-8로 변환해 버퍼에 추가합니다.

FHttpMultipartFormData.cpp 파일의 141 번째 라인에서 정의되었습니다.

142{
143 FTCHARToUTF8 Conv(*Str);
144 Dest.Append(reinterpret_cast<const uint8*>(Conv.Get()), Conv.Length());
145}

다음에 의해서 참조됨 : BuildBody().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ BuildBody()

void FHttpMultipartFormData::BuildBody ( )
private

등록된 파트를 기반으로 HTTP 본문을 구성합니다.

FHttpMultipartFormData.cpp 파일의 78 번째 라인에서 정의되었습니다.

79{
80 BuiltBody.Reset();
81
83 {
84 // application/x-www-form-urlencoded: key1=value1&key2=value2
85 TArray<FString> Pairs;
86 for (const FTextPart& P : TextParts)
87 {
88 FString EncodedKey = FGenericPlatformHttp::UrlEncode(P.Name);
89 FString EncodedValue = FGenericPlatformHttp::UrlEncode(P.Value);
90 Pairs.Add(FString::Printf(TEXT("%s=%s"), *EncodedKey, *EncodedValue));
91 }
92
93 FString Body = FString::Join(Pairs, TEXT("&"));
94 AppendUtf8(BuiltBody, Body);
95 }
96 else // Multipart
97 {
98 auto Add = [](TArray<uint8>& Dest, const FString& S)
99 {
100 AppendUtf8(Dest, S);
101 };
102
103 const FString LineEnd = TEXT("\r\n");
104 const FString BoundaryLine = TEXT("--") + Boundary;
105
106 // 텍스트 파트
107 for (const FTextPart& P : TextParts)
108 {
109 Add(BuiltBody, BoundaryLine + LineEnd);
110 Add(BuiltBody, FString::Printf(
111 TEXT("Content-Disposition: form-data; name=\"%s\"%s"),
112 *P.Name, *LineEnd));
113 Add(BuiltBody, LineEnd); // 헤더와 값 사이의 빈 줄
114 Add(BuiltBody, P.Value + LineEnd);
115 }
116
117 // 파일 파트
118 for (const FFilePart& P : FileParts)
119 {
120 Add(BuiltBody, BoundaryLine + LineEnd);
121 Add(BuiltBody, FString::Printf(
122 TEXT("Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"%s"),
123 *P.Name, *P.FileName, *LineEnd));
124 Add(BuiltBody, FString::Printf(
125 TEXT("Content-Type: %s%s"),
126 *P.MimeType, *LineEnd));
127 Add(BuiltBody, LineEnd); // 바이너리 데이터 앞의 빈 줄
128
129 // 바이너리 데이터
130 BuiltBody.Append(P.Data);
131
132 // 파일 내용 뒤의 CRLF
133 AppendUtf8(BuiltBody, LineEnd);
134 }
135
136 // 닫는 경계
137 Add(BuiltBody, BoundaryLine + TEXT("--") + LineEnd);
138 }
139}
@ FormUrlEncoded
application/x-www-form-urlencoded (OAuth2 등)
static void AppendUtf8(TArray< uint8 > &Dest, const FString &Str)
문자열을 UTF-8로 변환해 버퍼에 추가합니다.

다음을 참조함 : AppendUtf8(), Boundary, BuiltBody, FileParts, FormDataType, FormUrlEncoded, TextParts.

다음에 의해서 참조됨 : SetupHttpRequest().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ DetectMimeFromExtension()

FString FHttpMultipartFormData::DetectMimeFromExtension ( const FString &  FileName)
staticprivate

파일 확장자를 기반으로 MIME 타입을 추론합니다.

FHttpMultipartFormData.cpp 파일의 147 번째 라인에서 정의되었습니다.

148{
149 const FString Ext = FPaths::GetExtension(FileName, /*bIncludeDot*/ false).ToLower();
150
151 // 일반적인 오디오 타입
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");
157 // 대체 타입
158 if (Ext == TEXT("txt")) return TEXT("text/plain");
159 if (Ext == TEXT("json")) return TEXT("application/json");
160
161 // 기본 타입
162 return TEXT("application/octet-stream");
163}

다음에 의해서 참조됨 : AddFile().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetBoundary()

const FString & FHttpMultipartFormData::GetBoundary ( ) const
inline

현재 사용 중인 경계 문자열입니다.

FHttpMultipartFormData.h 파일의 60 번째 라인에서 정의되었습니다.

60{ return Boundary; }

다음을 참조함 : Boundary.

◆ GetBuiltBody()

const TArray< uint8 > & FHttpMultipartFormData::GetBuiltBody ( ) const
inline

직렬화된 multipart 본문 데이터입니다.

FHttpMultipartFormData.h 파일의 63 번째 라인에서 정의되었습니다.

63{ return BuiltBody; }

다음을 참조함 : BuiltBody.

◆ Reset()

void FHttpMultipartFormData::Reset ( )

모든 파트를 제거하고 경계를 재생성합니다.

FHttpMultipartFormData.cpp 파일의 20 번째 라인에서 정의되었습니다.

21{
22 TextParts.Reset();
23 FileParts.Reset();
24 BuiltBody.Reset();
25
26 // Multipart일 때만 Boundary 생성
28 {
29 // 어떤 고유한 토큰이든 괜찮습니다. 디버깅을 위해 읽기 쉽게 유지합니다.
30 Boundary = TEXT("----UE_Multipart_") + FGuid::NewGuid().ToString(EGuidFormats::Digits);
31 }
32}
@ Multipart
multipart/form-data (파일 업로드용)

다음을 참조함 : Boundary, BuiltBody, FileParts, FormDataType, Multipart, TextParts.

다음에 의해서 참조됨 : FHttpMultipartFormData().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetupHttpRequest()

void FHttpMultipartFormData::SetupHttpRequest ( const TSharedRef< IHttpRequest, ESPMode::ThreadSafe > &  Request)

HTTP 요청에 Content-Type 헤더와 본문을 설정합니다.

매개변수
Request[in] 전송할 HTTP 요청 객체입니다.

FHttpMultipartFormData.cpp 파일의 55 번째 라인에서 정의되었습니다.

56{
57 BuildBody();
58
59 // FormDataType에 따라 다른 Content-Type 설정
61 {
62 Request->SetHeader(TEXT("Content-Type"),
63 TEXT("application/x-www-form-urlencoded"));
64 }
65 else // Multipart
66 {
67 // 경계를 포함한 Content-Type
68 Request->SetHeader(TEXT("Content-Type"),
69 FString::Printf(TEXT("multipart/form-data; boundary=%s"), *Boundary));
70 }
71
72 // 참고: Accept 헤더는 호출자가 설정해야 합니다. 많은 STT 엔드포인트는 JSON을 기대합니다.
73 // Request->SetHeader(TEXT("Accept"), TEXT("application/json"));
74
75 Request->SetContent(BuiltBody);
76}
void BuildBody()
등록된 파트를 기반으로 HTTP 본문을 구성합니다.

다음을 참조함 : Boundary, BuildBody(), BuiltBody, FormDataType, FormUrlEncoded.

다음에 의해서 참조됨 : UKLingoNetworkSystem::RequestChatAudio(), UKLingoNetworkSystem::RequestDailyAudio(), UKLingoNetworkSystem::RequestSpeakingJudges(), UKLingoNetworkSystem::RequestUserToken(), UKLingoNetworkSystem::RequestWriteSubmit().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ Boundary

FString FHttpMultipartFormData::Boundary
private

FHttpMultipartFormData.h 파일의 92 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : BuildBody(), GetBoundary(), Reset(), SetupHttpRequest().

◆ BuiltBody

TArray<uint8> FHttpMultipartFormData::BuiltBody
private

FHttpMultipartFormData.h 파일의 95 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : BuildBody(), GetBuiltBody(), Reset(), SetupHttpRequest().

◆ FileParts

TArray<FFilePart> FHttpMultipartFormData::FileParts
private

FHttpMultipartFormData.h 파일의 94 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : AddFile(), BuildBody(), Reset().

◆ FormDataType

EFormDataType FHttpMultipartFormData::FormDataType
private

FHttpMultipartFormData.h 파일의 91 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : BuildBody(), Reset(), SetupHttpRequest().

◆ TextParts

TArray<FTextPart> FHttpMultipartFormData::TextParts
private

FHttpMultipartFormData.h 파일의 93 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : AddText(), BuildBody(), Reset().


이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: