NetMvc通过亚马逊方式服务器端和客户端上传MinIO顺利解决

前言:

1、由于项目是.NET Framework 4.7 MVC LayUI,所以需要找一个资源站点存放项目中静态资源文件;

2、需要支持服务端和客户端都支持上传文件方式;

3、调用简单,涉及库越少越好。

结果:

调用 AWSSDK.S3 和 AWSSDK.Core 实现文件上传到 MinIO ;调用MimeMapping获取文件ContentType

MinIO

Minio是Apache License v2.0下发布的对象存储服务器。它与Amazon S3云存储服务兼容。它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM映像。对象的大小可以从几KB到最大5TB Minio服务器足够轻,可以与应用程序堆栈捆绑在一起,类似于NodeJS,Redis和MySQL。

AWS S3

全称:(Amazon Simple Storage Service), 是一种面向网络的存储服务,可以支持用户随时在Web的任何位置,存储和检索任意大小的数据本身也提供了简单而直观的管理控制台来处理这些任务,但我这里使用的是,面向C# 方向的S3网络存储服务。

具体调研实现方法如下

1、服务器的配置

推荐版本:minio.RELEASE.2022-05-26T05-48-41Z

当前版本文件可来取自如。

2、服务端上传实现代码

需要NuGit调用有三项

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="AWSSDK.Core" version="3.7.304.16" targetFramework="net47" />
  <package id="AWSSDK.S3" version="3.7.309.4" targetFramework="net47" />
  <package id="MimeMapping" version="3.0.1" targetFramework="net47" />
</packages>

具体实现代码

using Amazon;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.IO;
using System.Net;
using System.Threading.Tasks;

namespace DealMvc.AmazonS3 {
    /// <summary>
    /// 实现MinIO文件的上传
    /// 调用 AWSSDK.S3 和 AWSSDK.Core 
    /// 文件的 ContentType 调用 MimeMapping 实现
    /// </summary>
    public class AmazonHelper {
        /// <summary>
        /// Bucket访问AccessKey
        /// </summary>
        readonly string AccessKey = "admin";
        /// <summary>
        /// Bucket访问SecretKey
        /// </summary>
        readonly string SecretKey = "123456+++";
        /// <summary>
        /// 存储桶名称
        /// </summary>
        readonly string BucketName = "test";
        /// <summary>
        /// 服务地址
        /// </summary>
        readonly string ServiceURL = "http://192.168.20.66:9000";
        /// <summary>
        /// 预览地址
        /// </summary>
        readonly string WebURL = "https://res.test.cn";
        /// <summary>
        /// 
        /// </summary>
        //readonly string awsRegion = "us-east-1";

        readonly AmazonS3Client client;
        /// <summary>
        /// 构造函数
        /// </summary>
        public AmazonHelper() {
            //提供awsAccessKeyId和awsSecretAccessKey构造凭证
            var credentials = new BasicAWSCredentials(AccessKey, SecretKey);
            //提供awsEndPoint(域名)进行访问配置
            var clientConfig = new AmazonS3Config {
                // 必须在设置ServiceURL前进行设置,并且需要和`MINIO_REGION`环境变量一致。
                //RegionEndpoint = RegionEndpoint.GetBySystemName(awsRegion),
                RegionEndpoint = RegionEndpoint.USEast1,
                // 替换成你自己的MinIO Server的URL
                ServiceURL = ServiceURL,
                // 必须设为true
                ForcePathStyle = true,
            };
            client = new AmazonS3Client(credentials, clientConfig);
        }

        #region 上传文件
        /// <summary>
        /// 上传文件[本地]
        /// </summary>
        /// <param name="key"></param>
        /// <param name="filePath">路径</param>
        /// <returns>网址</returns>
        public async Task<string> UploadFilePath(string saveKey, string filePath) {
            var request = new PutObjectRequest {
                BucketName = BucketName,
                Key = saveKey,
                ContentType = GetContentType(saveKey),
                FilePath = filePath,
            };
            var response = await client.PutObjectAsync(request);
            //
            return WebUrlKey(response.HttpStatusCode, saveKey);
        }
        /// <summary>
        /// 上传文件[流]
        /// </summary>
        public async Task<string> UploadInputStream(string saveKey, Stream inputStream) {
            var request = new PutObjectRequest {
                BucketName = BucketName,
                Key = saveKey,
                ContentType = GetContentType(saveKey),
              
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值