Unity引用MinIO

说明

最近在网上荡了半天,想找到在Unity中接MinIO的示例,结果空空如也。按照官方文档,用VS创建【控制台应用(.NET Framework)】倒是可以在“play.min.io”上正常上传下载。但是将代码移植到Untiy项目中就不行了,没有命名空间的引用....

源码:MinIO_Unity: 在Unity项目中对MinIO操作

1、创建Untiy项目,将VS控制台应用代码微调到项目代码中,代码如下

using Minio;
using Minio.DataModel;
using Minio.DataModel.Args;
using Minio.DataModel.Encryption;
using Minio.Exceptions;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;

public class Test : MonoBehaviour
{
    private IMinioClient minio;
    private Thread thread;

    private string endpoint;
    private string accessKey;
    private string secretKey;

    private string bucketName;
    private string objectName;
    private string filePath;
    private string contentType;

    private void Awake()
    {
        endpoint = "play.min.io";
        accessKey = "见下面的步骤";
        secretKey = "见下面的步骤";

        bucketName = "blue1116";
        objectName = "movie.mp4";
        //objectName = "002.jpg";
        filePath = "C:\\Users\\lsxk0\\Desktop\\movie.mp4";
        //filePath = "C:\\Users\\lsxk0\\Desktop\\1.jpg"; 
        //filePath = Application.persistentDataPath + "/IMG.jpg";
        contentType = "application/jpg";

        thread = new Thread(OnWork);
        thread.Start();
    }

    private bool isUpload = false;
    private void OnWork()
    {
        while (true)
        {
            if (minio != null)
            {
                if (isUpload)
                {
                    isUpload = false;
                    Debug.Log($"准备执行上传");
                    FileUpload().Wait();
                }
            }
            Thread.Sleep(1000);
        }
    }

    private void InitMinio()
    {
        try
        {
            minio = new MinioClient()
                                .WithEndpoint(endpoint)
                                .WithCredentials(accessKey, secretKey)
                                .WithSSL() //没有搭https的话,把连接语句的 WithSSL() 去掉即可
                                .Build();
            Debug.Log($"MinIO Init");
        }
        catch (Exception ex)
        {
            Debug.LogError($"SetObjectRun Error----{ex.Message}");
        }
    }

    /// <summary>
    ///  文件上传
    /// </summary>
    private async Task FileUpload()
    {
        try
        {
            // 在服务器上制作一个bucket(如果还没有)
            var beArgs = new BucketExistsArgs().WithBucket(bucketName);
            bool found = await minio.BucketExistsAsync(beArgs).ConfigureAwait(false);
            if (!found)
            {
                var mbArgs = new MakeBucketArgs().WithBucket(bucketName);
                await minio.MakeBucketAsync(mbArgs).ConfigureAwait(false);
            }
            // 将文件上传到bucket
            var putObjectArgs = new PutObjectArgs()
                .WithBucket(bucketName)
                .WithObject(objectName)
                .WithFileName(filePath)
                .WithContentType(contentType);
            await minio.PutObjectAsync(putObjectArgs).ConfigureAwait(false);

            Debug.LogError("FileUpload Success:" + objectName);
        }
        catch (MinioException e)
        {
            Debug.LogError($"FileUpload Fail Error: {e.Message}");
        }
    }

    /// <summary>
    /// 将对象从bucket下载到本地文件
    /// </summary>
    public async Task GetObjectRun(
        IMinioClient minio,
        string bucketName = "my-bucket-name",
        string objectName = "my-object-name",
        string fileName = "local-filename",
        IServerSideEncryption sse = null)
    {
        try
        {
            File.Delete(fileName);
            var args = new GetObjectArgs()
                .WithBucket(bucketName)
                .WithObject(objectName)
                .WithFile(fileName)
                .WithServerSideEncryption(sse);
            _ = await minio.GetObjectAsync(args).ConfigureAwait(false);
            Debug.LogError($"Downloaded the file {fileName} from bucket {bucketName}");
        }
        catch (Exception e)
        {
            Debug.LogError($"[Bucket]  Exception: {e}");
        }
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.U))
        {
            if (minio == null)
                InitMinio();
            isUpload = true;
        }
    }

    private void OnDestroy()
    {
        thread.Abort();
    }
}

1.1 使用 MinIO 的 Play 测试环境试用控制台

MinIO 控制台 — 适用于 Linux 的 MinIO 对象存储点击链接进入。复制UserName+Password。

MinIO Console点击进入控制台

1.2 accessKey+secretKey的获取

2、但是此时【using】都是灰色的,没有引用

3、【Unity请不要使用此方法】按照官方文档,此时应该注册Minio包,打开【VS】-【工具】-【NuGet包管理器】-【程序包管理器控制台】-输入【Install-Package Minio】---【结果如下】

3.1 结果:

4、使用第三方插件【成功上传,下载没测】

https://cloud.tencent.com/developer/article/2349012,感谢这位博主。

4.1 下载【第三方 NuGet 包管理器】

按照文章操作下载【第三方 NuGet 包管理器】。git地址如下https://github.com/GlitchEnzo/NuGetForUnity,打不开的可以直接下载:https://cloud.189.cn/t/A3aYNvNFnMvm (访问码:uet8)

4.2 导入完毕结构如下

4.3 通过第三方 NuGet 包管理器下载Minio。ps:如果没有出现【NuGet】,请把错误代码注释,我用的是6.0.0版本,其他版本没有测过(补充内容:前几天MinIO更新到6.0.1,都可以使用)

4.4 安装结果如下【请使用VS,VSCode依旧无引用】

此时就已经可以在Win10 Unity项目中进行测试

5、因为我在打安卓包的过程中出现了一些莫名的错误,所以修改了一些东西。好吧,我大意了,没有闪。

5.1 如果你的安卓包也出现了莫名错误,可以尝试我的更改

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值