上文写到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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号