• .NET Core版本七牛云SDK使用


    由于之前的微软帐号注销,导致我Nuget帐号注销,MQiniu的包在nuget已经无法找到,所以重新上传了一个MQiniu.CoreSdk(原先名字无法使用,心塞),对不起各位

    一、问题背景

      公司目前正在将一部分的业务从.NET平台准备迁移到.NET Core上去,同时也准备启用docker进行.NET Core的部署,在项目迁移过程中,不可避免的碰到有些SDK只有在.NET Framework下有,而.NET Core没有的情况,而七牛就是碰到的其中一个,之前在nuget上看到qiniu的官方SDK引用进来后,会提醒你该sdk是基于.NET Framework版本,那如果部署在IIS下是没问题的,但是如果部署在linux下,那就跑不起来了,基于此,也为了以后方便其他项目的迁移,就捣鼓了一个.NET Core版本的七牛SDK,基于官方最新7.3的版本。

    二、修改说明

      废话不多说,上代码,啊呸先上链接https://github.com/Hello-Mango/MQiniu.Core,这是我已经编译好的代码,并且已经上传NUGET(搜索MQiniu.CoreSdk,不敢用qiniu.core这个名字,觉得最好还是官方可以出一个)

      修改方案其实是非常简单的,官方的sdk源码语法上跟.NET Core其实就是一样的,最终需要修改的是HttpManager.cs文件中将

    wReq.ServicePoint.Expect100Continue = false;

      修改为

    ServicePointManager.Expect100Continue = false;

      如果不修改的话,会出现报错情况,具体啥报错给忘记了,这个也是我后来查找到的解决方案,如果有朋友有更好的解决方案,也麻烦请告知。

      以下是引用图:

            

      可以看到使用MQiniu.Core时不会提示已使用.NETFrameWork

    三、具体使用

      如果大家想自己尝试的话,可以下载官方的SDK源码进行.NET Core的改造,官方sdk源码地址:https://github.com/qiniu/csharp-sdk,或者可以直接Nuget搜索MQiniu.CoreSdk

      具体代码使用方法完全可以参照官方的文档进行,这里就不多说,这边只给出我这边的试验代码

            public List<Object> UploadQiniu()
            {
                Mac mac = new Mac(appSettings.qiniuupload.qiniuyunAK, appSettings.qiniuupload.qiniuyunSK);/AK SK使用
                PutPolicy putPolicy = new PutPolicy();
                putPolicy.Scope = appSettings.qiniuupload.qiniuyunBucket;
                string token = Auth.CreateUploadToken(mac, putPolicy.ToJsonString());//token生成
                IFormFileCollection files = Request.Form.Files;
                Config config = new Config()
                {
                    Zone = Zone.ZONE_CN_East,
                    UseHttps = true
                };
                var res = Request.Form.ToArray();
    
                FormUploader upload = new FormUploader(config);
                HttpResult result = new HttpResult();
                List<Object> list = new List<Object>();
                foreach (IFormFile file in files)//获取多个文件列表集合
                {
                    if (file.Length > 0)
                    {
                        var _fileName = ContentDispositionHeaderValue
                                        .Parse(file.ContentDisposition)
                                        .FileName
                                        .Trim('"');
                        var _qiniuName = appSettings.qiniuupload.prefixPath + "/" + DateTime.Now.ToString("yyyyMMddHHmmssffffff") + _fileName;//重命名文件加上时间戳
                        Stream stream = file.OpenReadStream();
                        result = upload.UploadStream(stream, _qiniuName, token, null);
                        if (result.Code == 200)
                        {
                            list.Add(new { fileName = _fileName, qiniuName = _qiniuName, uploadTime = DateTime.Now, Remark = res.First(p => p.Key == _fileName).Value[0] });
                        }
                        else
                        {
                            throw new Exception(result.RefText);//上传失败错误信息
                        }
                    }
                }
                return list;
            }

    四、总结

      目前使用下来,qiniu是个非常好的CDN以及对象存储平台,开发测试中的免费使用量也基本都是够够的,但是觉得像.NET Core这种的SDK包最好还是由官方提供,然后后面也许会继续探索性的尝试七牛的容器平台。

      由于这个只是我个人的修改作品,未经过大量的验证,如果大家发现有什么问题的话,也请联系我。

      感谢@无语1994的指点,官方.net core版本是Qiniu.Shared,不过维护日期貌似比较早,版本是7.2.15版本的SDK

    作者: Mango

    出处: http://www.cnblogs.com/OMango/

    关于自己:专注.Net桌面开发以及Web后台开发,开始接触微服务、docker等互联网相关

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(hongjb@yizit.com)咨询.

  • 相关阅读:
    C#之Raw Socket实现网络封包监视
    es6Promise及小程序Promise用法
    在微信小程序的JS脚本中使用Promise来优化函数处理
    小程序踩过的一个小坑---解析二维码decodeURIComponent() url解码
    js json转url参数
    微信小程序-实现分享(带参数)
    php中的匿名函数和闭包(closure)
    微信小程序之回调函数
    php AES cbc模式 pkcs7 128位加密解密(微信小程序)
    微信小程序,开发中几个重要的知识点(加密解密,转发,进入场景,session_key)
  • 原文地址:https://www.cnblogs.com/OMango/p/8447480.html
Copyright © 2020-2023  润新知