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,并传递参数。
相关推荐
朗迹 - 张伟10 小时前
UE5.7 PCG从入门到精通系列课程【第三课:程序化生成森林】
ue5·pcg
朗迹 - 张伟1 天前
UE5.7 PCG从入门到精通系列课程【第二课:使用PCG制作草地系统】
ue5·pcg
im长街1 天前
UE 课程介绍 - 1. 3DMax软件建模基础
ue5·3dsmax
directx3d_beginner3 天前
25,怪物受伤害和受力
ue5
directx3d_beginner4 天前
23,怪物血量改为C++
ue5
远离UE44 天前
UE5 compute shader 原子加
开发语言·c++·ue5
朗迹 - 张伟4 天前
UE5.7 PCG从入门到精通系列课程【第一课:基础介绍】
ue5·pcg
directx3d_beginner5 天前
22,攻击检测改为C++
ue5
HAPPY酷6 天前
【ROS2】 机械臂架构 vs UE5 游戏开发架构 终极对照表
架构·ue5
DoomGT7 天前
UE5 - 制作游戏中切换窗口后游戏自动暂停功能
游戏·ue5·ue4·虚幻·虚幻引擎·unreal engine