UE5 接入阿里云OSS,实现简单上传

  1. 下载OSS SDK 下载SDK安装包

  2. 安装CMake下载CMake
    安装的时候记得勾选自动配置环境变量
    在这里插入图片描述

    安装完后,cmd 输入cmake 确认环境变量是否正常,没有的手动添加(记得重启电脑)。在这里插入图片描述 在这里插入图片描述在这里插入图片描述

  3. 下载的SDK中不直接提供alibabacloud-oss-cpp-sdk.sln工程文件,需要通过cmake生成所需的工程文件。
    创建build文件夹,并运行cmake …
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    输入cd build
    在这里插入图片描述
    输入cmake …
    在这里插入图片描述在这里插入图片描述
    打开build文件夹,双击点开alibabacloud-oss-cpp-sdk.sln,开始进行编译
    在这里插入图片描述
    编译前需要注意的是,UE本身提供OpenSSL模块,并且UE的所使用的文件版本比阿里云OSS SDK要新很多,所以需要先替换阿里云 OSS SDK的OpenSSL头文件。(否则UE插件编译会报错)
    先找到UE路径下的OpenSSL头文件
    在这里插入图片描述
    复制到阿里云OSS SDK下所引用的头文件文件夹进行全选替换
    在这里插入图片描述

在这里插入图片描述
添加C++预处理器定义 CURL_STATICLIB(否则UE插件编译会报错)
在这里插入图片描述在这里插入图片描述在这里插入图片描述
开始编译
在这里插入图片描述
找到需要的UE需要的alibabacloud-oss-cpp-sdk.lib文件
在这里插入图片描述
4. 打开UE5工程,创建空白插件
在这里插入图片描述
将所需要的 alibabacloud-oss-cpp-sdk.lib文件放到该插件下
在这里插入图片描述
将阿里云插件的include文件拷贝到新建的UE插件下
在这里插入图片描述在这里插入图片描述
打开Build.cs文件,按照下图更改
在这里插入图片描述
5.在该插件内创建UE 新的C++类,父类是GameInstanceSubsystem
在这里插入图片描述
创建上传文件的函数
头文件.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "AliyunSubsystem.generated.h"

USTRUCT(BlueprintType)
struct FOssUserData
{
	GENERATED_BODY()

public:
	//Oss AccessKeyID
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString AccessKeyID;
	//Oss AccessKeySecret
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString AccessKeySecret;
	//Oss Endpoint
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString Endpoint;
};
USTRUCT(BlueprintType)
struct FOssError
{
	GENERATED_BODY()

public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString errCode;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString RequestId;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString errMsg;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FOssUserData Data;
	FOssError()
	{
		errCode = "0";
	}
};


/**
 * 
 */
DECLARE_DYNAMIC_DELEGATE_TwoParams(FOssComplete, bool, isSuccess, const FOssError&, UserData);
UCLASS()
class ALIYUNOSS_API UAliyunSubsystem : public UGameInstanceSubsystem
{
	GENERATED_BODY()
public:
	
	//文件上传
	UFUNCTION(BlueprintCallable, Category = "Aliyun")
	void OssUploadFiles(FOssUserData UserData, FString BucketName, FString OssFilePath, FString LocalFilePath,FOssComplete resultCallBack);

};

实现.cpp

// Fill out your copyright notice in the Description page of Project Settings.
#include "AliyunSubsystem.h"
#include <fstream>
#include "alibabacloud/oss/OssClient.h"

using namespace AlibabaCloud::OSS;

void UAliyunSubsystem::OssUploadFiles(FOssUserData UserData, FString BucketName, FString OssFilePath, FString LocalFilePath, FOssComplete resultCallBack)
{
	std::string _AccessKeyID = TCHAR_TO_UTF8(*UserData.AccessKeyID);
	std::string _AccessKeySecret = TCHAR_TO_UTF8(*UserData.AccessKeySecret);
	std::string _Endpoint = TCHAR_TO_UTF8(*UserData.Endpoint);
	std::string _BucketName = TCHAR_TO_UTF8(*BucketName);
	std::string _ObjectName = TCHAR_TO_UTF8(*OssFilePath);
	std::string _FilePath = TCHAR_TO_UTF8(*LocalFilePath);
	
	/* 初始化网络等资源。*/
	InitializeSdk();

	ClientConfiguration conf;

	OssClient client(_Endpoint, _AccessKeyID, _AccessKeySecret, conf);

	//auto outcome = client.PutObject(_BucketName, _ObjectName, _FilePath);

	AsyncTask(ENamedThreads::AnyThread, [=]() {

		auto outcome = client.PutObject(_BucketName, _ObjectName, _FilePath);
		if (!outcome.isSuccess())
		{
			UE_LOG(LogTemp, Log, TEXT("上传异常"));
			FOssError err;
			err.Data = UserData;
			err.errCode = UTF8_TO_TCHAR(outcome.error().Code().c_str());
			err.errMsg = UTF8_TO_TCHAR(outcome.error().Message().c_str());
			err.RequestId = UTF8_TO_TCHAR(outcome.error().RequestId().c_str());
			AsyncTask(ENamedThreads::GameThread, [=]()
				{
					resultCallBack.ExecuteIfBound(false, err);
				});
			return;
		}
		FOssError err;
		err.Data = UserData;
		AsyncTask(ENamedThreads::GameThread, [=]()
			{
				resultCallBack.ExecuteIfBound(true, err);
			});
		});



	/* 释放网络等资源。*/
	ShutdownSdk();
}

6.阿里云OSS管理控制台内容配置
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

7.UE测试
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值