Skip to content
.NET 开发者指北.NET 开发者指北
CMS
.NET指北
FreeKit
Docker
关于
博客
github icon
    • .NET Core 学习示例文档
      • 创建简单Hello World
        • .NET Core 简单测试项目
          • FreeSql+ASP.NET Core
            • RESTful+FreeSql+AutoMapper
              • IdentityServer4
                • 七牛云对象存储
                  • 开源地址
                    • 集成类库
                      • 前提
                        • 准备
                          • appsettings.json 配置项
                            • 安装包
                              • 代码解读
                                • 发布至 Linux 下的 Docker
                                  • 运行结果
                                    • 参考
                                    • ImCore 即时通讯
                                      • Nacos 配置中心
                                        • Serilog指北
                                          • 在 ASP.NET Core 6 如何添加 Startup.cs
                                            • 在 ASP.NET Core 6 中添加Startup.cs的整洁方式

                                            七牛云对象存储

                                            calendar icon2022年6月2日timer icon大约 3 分钟word icon约 928 字

                                            此页内容
                                            • 开源地址
                                            • 集成类库
                                            • 前提
                                            • 准备
                                            • appsettings.json 配置项
                                            • 安装包
                                            • 代码解读
                                            • 发布至 Linux 下的 Docker
                                            • 运行结果
                                            • 参考

                                            # 七牛云对象存储

                                            .NET Core 下集成 七牛云下的对象存储

                                            # 开源地址

                                            OvOv.MQiniu.Coreopen in new window

                                            # 集成类库

                                            基础类库集成方案开源地址文档说明
                                            Qiniu 云对象存储open in new window.netopen in new window/.net coreopen in new windowc# sdkopen in new window由于官网未支持. net core,所以 大家看社区版解决方案open in new window

                                            # 前提

                                            • 本地 windows 10,安装 .net core 2.2+
                                            • Linux 服务器 Ubuntu Server 16+
                                            • 服务器安装了 Docker
                                            • 本地 xftp、xshell(这二个分别是 windows 传文件至 linux,执行命令行。)

                                            # 准备

                                            在七牛云中自行注册后,在个人中心,密钥管理,生成自己的密钥(https://portal.qiniu.com/user/key) v* AK,SK 分别代表:AccessKey/SecretKey

                                            • Bucket 中的 vant-ui,是创建对象存储时起的名字
                                            • PrefixPath 中的值,随意字符串,前缀地址。
                                            • Host 为:融合 CDN 测试域名,可自行绑定自己的域名,否则只有三十天免费使用时长。

                                            # appsettings.json 配置项

                                              "Qiniu": {
                                                "AK": "eUH1O-ft66S4XM2GIK7FGmj7czuYkcAyNGDAc-wq",
                                                "SK": "4dOi1daSr2-YgofhAfWb8JaLrbgozCmgD6AUmmM9",
                                                "Bucket": "vant-ui",
                                                "PrefixPath": "ui",
                                                "Host": "http://pu5vnz60k.bkt.clouddn.com/"
                                              }
                                            
                                            1
                                            2
                                            3
                                            4
                                            5
                                            6
                                            7

                                            # 安装包

                                            Install-Package MQiniu.Core
                                            
                                            1

                                            # 代码解读

                                            配置 swagger 的过程就不说了,创建 QiniuController

                                              /// <summary>
                                                /// 七牛云上传服务
                                                /// </summary>
                                                [Route("api/[controller]")]
                                                [ApiController]
                                                public class QiniuController : ControllerBase
                                                {
                                                    private readonly IConfiguration _configuration;
                                            
                                                    public QiniuController(IConfiguration configuration)
                                                    {
                                                        _configuration = configuration;
                                                    }
                                            
                                                    /// <summary>
                                                    /// 根据后台配置项,得到请求七牛云的token值,前台也可根据此token值上传至七牛云服务
                                                    /// </summary>
                                                    /// <returns></returns>
                                                    [HttpGet("access_token")]
                                                    public string GetAccessToken()
                                                    {
                                                        Mac mac = new Mac(_configuration["Qiniu:AK"], _configuration["Qiniu:SK"]);
                                                        PutPolicy putPolicy = new PutPolicy { Scope = _configuration["Qiniu:Bucket"] };
                                                        return Auth.CreateUploadToken(mac, putPolicy.ToJsonString());
                                                    }
                                            
                                                    /// <summary>
                                                    /// 上传文件至七牛云,code为200,代表上传成功,其他代表不成功
                                                    /// </summary>
                                                    /// <param name="file">单个文件</param>
                                                    /// <returns>new { code = 200, data ="七牛云文件地址,包括http://....mm.png", msg = "上传成功" };</returns>
                                                    [HttpPost("upload")]
                                                    public dynamic Upload(IFormFile file)
                                                    {
                                                        if (file.Length == 0)
                                                        {
                                                            return new { code = 1, msg = "文件为空" };
                                                        }
                                            
                                                        FormUploader upload = new FormUploader(new Config()
                                                        {
                                                            Zone = Zone.ZONE_CN_South,//华南
                                                            UseHttps = true
                                                        });
                                            
                                                        var fileName = ContentDispositionHeaderValue
                                                            .Parse(file.ContentDisposition)
                                                            .FileName.Trim();
                                            
                                                        string qiniuName = _configuration["Qiniu:PrefixPath"] + "/" + DateTime.Now.ToString("yyyyMMddHHmmssffffff") + fileName;
                                                        Stream stream = file.OpenReadStream();
                                                        HttpResult result = upload.UploadStream(stream, qiniuName, GetAccessToken(), null);
                                            
                                                        if (result.Code == 200)
                                                        {
                                                            return new { code = 200, data = _configuration["Qiniu:Host"] + qiniuName, msg = "上传成功" };
                                                        }
                                            
                                                        return new { code = 1, msg = "上传失败" };
                                                    }
                                                }
                                            
                                            
                                            1
                                            2
                                            3
                                            4
                                            5
                                            6
                                            7
                                            8
                                            9
                                            10
                                            11
                                            12
                                            13
                                            14
                                            15
                                            16
                                            17
                                            18
                                            19
                                            20
                                            21
                                            22
                                            23
                                            24
                                            25
                                            26
                                            27
                                            28
                                            29
                                            30
                                            31
                                            32
                                            33
                                            34
                                            35
                                            36
                                            37
                                            38
                                            39
                                            40
                                            41
                                            42
                                            43
                                            44
                                            45
                                            46
                                            47
                                            48
                                            49
                                            50
                                            51
                                            52
                                            53
                                            54
                                            55
                                            56
                                            57
                                            58
                                            59
                                            60
                                            61
                                            62

                                            Upload 方法中,Zone.ZONE_CN_South,代表华南,所以创建对象存储时要注意,请选择与此相同的位置(华南),或根据实际情况修改 Zone 所在地区的枚举值即可。

                                            FormUploader upload = new FormUploader(new Config()
                                            {
                                                Zone = Zone.ZONE_CN_South,//华南
                                                UseHttps = true
                                            });
                                            
                                            
                                            1
                                            2
                                            3
                                            4
                                            5
                                            6

                                            # 发布至 Linux 下的 Docker

                                            双击 publish.bat,生成的文件夹为如下:

                                            image

                                            修改项目名为 qiniu-web,复制 至 linux 服务器中,(xftp 工具) image

                                            使用 xshell 远程登录后,进入 root 权限。

                                            root@VM-37-104-ubuntu:/home/ubuntu/# sudo su
                                            root@VM-37-104-ubuntu:/home/ubuntu/# cd qiniu-web
                                            
                                            1
                                            2

                                            前置条件,在 ubuntu 上安装好了 docker。并且正常运行。

                                            -d 代表后台运行,此时将对外显露 5000 端口运行,5000 是运行后,docker 对外的端口,80 是这个服务对外的端口,其中 Dockerfile 存在语句 EXPOSE 80

                                            docker build -t igeekfan/qiniu .     #生成images
                                            docker run -d -p 5000:80 igeekfan/qiniu  # 生成 container 并运行在5000端口
                                            
                                            1
                                            2

                                            此时打开 浏览器, ip+端口 5000 即可访问服务,请加/swagger。

                                            本项目已部署至服务器 http://122.152.192.161:5000/swagger/index.htmlopen in new window

                                            # 运行结果

                                            image.png

                                            # 参考

                                            • .NET Core 版本七牛云 SDK 使用https://www.cnblogs.com/OMango/p/8447480.htmlopen in new window
                                            • .NET Core 部署至 Linux 下的 Docker http://blog.igeekfan.cn/2019/06/09/dotnetcore/aspnetcore-Deploy-To-Docker-Ubuntu/open in new window
                                            edit icon在 GitHub 上编辑此页open in new window
                                            上次编辑于: 2022/6/2 18:18:50
                                            贡献者: igeekfan
                                            上一页
                                            IdentityServer4
                                            下一页
                                            ImCore 即时通讯
                                            MIT Licensed | Copyright © 2021-present luoyunchong
                                            苏ICP备16046457号-1

                                            该应用可以安装在你的 PC 或移动设备上。这将使该 Web 应用程序外观和行为与其他应用程序相同。它将在出现在应用程序列表中,并可以固定到主屏幕,开始菜单或任务栏。此 Web 应用程序还将能够与其他应用程序和你的操作系统安全地进行交互。

                                            详情