构建对象存储服务OSS

上文写到PicGO与威联通的结合,那是与威联通自身存储结合,本文介绍自己搭建一个对象存储服务。

如果购买阿里云,华为云等OSS服务,如果是个人玩玩,花十几块就可以体验。如果针对一家中小企业,从容量、流量等等因素,也是一笔不小的费用,其实自己搭建一个OSS服务,完全满足中小企业的需求。

以下还拿我用的威联通为例,通过Docker安装MinIO,实现自己的OSS服务

进入威联通的ContainerStation,创建MinIO

如果想让上传的视频、图片等信息可以在威联通文件里面进行管理(对于文件是不能查看的,想要做到同步,需要进行额外操作,因为不是重点,这里就不介绍了),这里可以在威联通创建共享文件夹,里面再创建certs和data文件夹,里面挂载MinIO服务的路径,如下图:

配置好网络,我这里用的桥接模式,使用固定IP,点击【创建】过一会儿,MinIO服务便搭建好了。

通过控制台获取默认用户名和密码

登录MinIO


此时提示创建桶

现在就是自己上传视频、图片的空间了(桶)。可以试一下上传文件

进入空间(桶),在里面试着上传文件

上传了再看威联通的共享文件夹,data文件是否有数据(这里的数据不能直接看)。

到此,配置的OSS服务便实现,对于开发人员来说,这只是搭建工具,怎么让自己的系统与OSS服务(工具)串联起来呢,MinIO官网有相对应的实例

这里我以熟悉的.NET来实现

准备如下:

Access Key


点击【Create】弹出框后,记得把文件下载下来,否则会把Secret Key遗忘,再次打开这个Access Key不会显示Secret Key。

为桶设置权限


因为我想上传,下载文件,所以这里设置为readwrite,仅对设置的桶起作用(划定权限范围)

Coding

因为之前实现过FtpClient上传文件,这次再加一个MinIOClientAdapter,可以在.net core 服务里面创建MinIOClient,然后进行注入,在项目里面哪里需要,就直接用就行了。

public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton();
            services.AddSingleton();
            services.Configure(this.Configuration.GetSection("FtpClientSetting"));
            services.Configure(this.Configuration.GetSection("MinIOClientSetting"));
            var minioClient = new MinioClient()
            .WithEndpoint("192.168.50.105:9000")
            .WithCredentials("***", "*****")
            .WithSSL(false)
            .Build();
            services.AddSingleton(minioClient);
        }

上传文件代码如下:

public async Task UpFile(UploadModel UploadModel)
        {
            try
            {
                //等待异步执行全部完成,否则下面的流文件控制就会有问题
                EnsureBucketExistsAsync("ansheng", UploadModel.UploadType).Wait();

                var putObjectArgs = new PutObjectArgs()
                .WithBucket("ansheng")
                .WithObject(#34;/test/{UploadModel.UploadFile.FileName}")
                .WithStreamData(UploadModel.UploadFile.OpenReadStream())
                .WithObjectSize(UploadModel.UploadFile.Length)
                .WithContentType(UploadModel.UploadFile.ContentType);

                await _minIOClient.PutObjectAsync(putObjectArgs).ConfigureAwait(false);
                Console.WriteLine("Successfully uploaded " + UploadModel.UploadFile.FileName);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        private async Task EnsureBucketExistsAsync(string bucketName, string uploadType)
        {
            var beArgs = new BucketExistsArgs().WithBucket(bucketName);
            bool found = await _minIOClient.BucketExistsAsync(beArgs).ConfigureAwait(false);
            if (!found)
            {
                var mbArgs = new MakeBucketArgs().WithBucket(uploadType);
                await _minIOClient.MakeBucketAsync(mbArgs).ConfigureAwait(false);
            }
        }

进行查看上传的图片,MinIO的阅览端口是9000,所以在读取文件时需要用这个端口,例如我刚刚上传了/test/pexels-andrea-piacquadio-3768894.jpg,这里读取的地址就是 http://192.168.50.106:9000/ansheng/test/pexels-andrea-piacquadio-3768894.jpg;域名+桶名+上传文件名称

展开阅读全文

页面更新:2024-04-13

标签:华为   端口   中小企业   权限   对象   上传   文件   工具   项目   数据   图片

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top