先記錄下:
1 void UploadImageFromFile(FString FileName) 2 { 3 // load image 4 TArray<uint8> ImageData; 5 FFileHelper::LoadFileToArray(ImageData, *FileName); 6 7 TSharedRef<IHttpRequest> HttpRequest = FHttpModule::Get().CreateRequest(); 8 FString Boundary = "---------------------------" + FString::FromInt(FDateTime::Now().GetTicks()); 9 HttpRequest->SetHeader(TEXT("Content-Type"), FString(TEXT("multipart/form-data; boundary=")) + Boundary); 10 HttpRequest->SetURL(TEXT("http://127.0.0.1/image/upload")); 11 HttpRequest->SetVerb(TEXT("POST")); 12 13 FString InFileFormat(TEXT(".jpg")); 14 FString FileContents = FBase64::Encode(ImageData); 15 FString HashStr = FMD5::HashAnsiString(*FileName); 16 17 FString PrefixBoundry = "\r\n--" + Boundary + "\r\n"; 20 21 FString FileHeader = "Content-Disposition: form-data; name=\"file\"; filename=\"" + FileName 22 + "\"\r\nContent-Type: " + InFileFormat 23 + "\"\r\nmd5Sum: " + HashStr + "\r\n\r\n"; 24 25 FString SuffixBoundary = "\r\n--" + Boundary + "--\r\n"; 26 27 /*FString ContentsString = PrefixBoundry + FileHeader + FileContents + SuffixBoundary; 28 HttpRequest->SetContentAsString(ContentsString);*/ 29 30 TArray<uint8> ContentArray; 31 FString ContentsString = PrefixBoundry + FileHeader; 32 ContentArray.Append((uint8*)TCHAR_TO_ANSI(*ContentsString), ContentsString.Len()); 33 ContentArray.Append(ImageData); 34 ContentArray.Append((uint8*)TCHAR_TO_ANSI(*SuffixBoundary), SuffixBoundary.Len()); 35 HttpRequest->SetContent(ContentArray); 36 37 //綁定回調 38 HttpRequest->OnProcessRequestComplete().BindRaw(this, &HandleHttpRequestComplete, EHttpReqType::PostImage); 39 40 //發送請求 41 HttpRequest->ProcessRequest(); 42 }