UE5 C++ 下载视频到本地。//BindLambda用法解析

cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "HttpModule.h"
#include "Interfaces/IHttpRequest.h"
#include "Interfaces/IHttpResponse.h"
#include "GameFramework/Actor.h"
#include "A_Hbt_AsyncDownloadFile.generated.h"

DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDownloadResultDelegate, bool, bSuccess, FString, FilePath);
UCLASS()
class AIEASEMAN3PROJECT_API AA_Hbt_AsyncDownloadFile : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	AA_Hbt_AsyncDownloadFile();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;
	
	/*视频下载*/

public:
	UFUNCTION(BlueprintCallable, Category = "Video Downloader")
	void DownloadVideoInBlueprint(const FString& URL, const FString& SavePath);

private:
	// 下载视频文件


	// HTTP 请求完成时的回调函数
	void OnDownloadComplete(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful, const FString& SavePath);
};
cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.


#include "A_Hbt_AsyncDownloadFile.h"

// Sets default values
AA_Hbt_AsyncDownloadFile::AA_Hbt_AsyncDownloadFile()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

}

// Called when the game starts or when spawned
void AA_Hbt_AsyncDownloadFile::BeginPlay()
{
	Super::BeginPlay();
	
}

// Called every frame
void AA_Hbt_AsyncDownloadFile::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

void AA_Hbt_AsyncDownloadFile::DownloadVideoInBlueprint(const FString& URL, const FString& SavePath)
{    // 创建 HTTP 请求
    TSharedRef<IHttpRequest, ESPMode::ThreadSafe> HttpRequest = FHttpModule::Get().CreateRequest();
    HttpRequest->SetVerb("GET"); // 使用 GET 方法下载文件
    HttpRequest->SetURL(URL);    // 设置下载的 URL

    // 绑定回调函数
    //HttpRequest->OnProcessRequestComplete().BindUObject(this, &AA_Hbt_AsyncDownloadFile::OnDownloadComplete, *SavePath);
    HttpRequest->OnProcessRequestComplete().BindLambda(
        [this, SavePath](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful) {
             this->OnDownloadComplete(Request, Response, bWasSuccessful, SavePath);
         }
     );
    // 发送请求
    HttpRequest->ProcessRequest();
}


void AA_Hbt_AsyncDownloadFile::OnDownloadComplete(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful, const FString& SavePath)
{
    if (bWasSuccessful && Response.IsValid())
    {
        // 获取下载的数据
        const TArray<uint8>& Data = Response->GetContent();

        // 将数据写入文件
        if (FFileHelper::SaveArrayToFile(Data, *SavePath))
        {
            UE_LOG(LogTemp, Display, TEXT("视频下载成功,保存路径:%s"), *SavePath);
        }
        else
        {
            UE_LOG(LogTemp, Error, TEXT("文件保存失败!"));
        }
    }
    else
    {
        UE_LOG(LogTemp, Error, TEXT("下载失败!"));
    }
}

用法解析

cpp 复制代码
    HttpRequest->OnProcessRequestComplete().BindLambda(
        [this, SavePath](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful) {
             this->OnDownloadComplete(Request, Response, bWasSuccessful, SavePath);
         }
     );

1.Lambda 表达式的基本结构

捕获列表\](参数列表) { 函数体 } 2.用噶 * **`[this, SavePath]`** :捕获列表,表示 Lambda 可以访问当前对象的 `this` 指针和局部变量 `SavePath`。 * **`(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)`** :参数列表,与 `OnProcessRequestComplete` 回调的签名一致。 * **`{ 函数体 }`** :调用成员函数 `OnDownloadComplete`,并传递参数。

相关推荐
幻雨様13 小时前
UE5多人MOBA+GAS 番外篇:同时造成多种类型伤害
ue5
幻雨様17 小时前
UE5多人MOBA+GAS 番外篇:同时造成多种类型伤害,以各种属性值的百分比来应用伤害(版本二)
java·前端·ue5
AA陈超1 天前
虚幻引擎5 GAS开发俯视角RPG游戏 #06-11:游戏后效果执行
c++·游戏·ue5·游戏引擎·虚幻
幻雨様2 天前
UE5多人MOBA+GAS 番外篇:将冷却缩减属性应用到技能冷却中
ue5
幻雨様3 天前
UE5多人MOBA+GAS 32、制作商店系统(一)
ue5
吴梓穆4 天前
UE5 UI自适应 DPI缩放
ui·ue5
幻雨様4 天前
UE5多人MOBA+GAS 30、技能升级机制
运维·服务器·ue5
吴梓穆9 天前
UE5 UI WarpBox 包裹框
ue5
脑壳疼___9 天前
vue3与ue5通信-工具类
前端·javascript·ue5
CG_MAGIC10 天前
虚幻 5 与 3D 软件的协作:实时渲染,所见所得
3d·ue5·游戏引擎·图形渲染·虚幻·游戏美术·渲云渲染