[聚合文章] .NET Core版本七牛云SDK使用

.Net 2018-02-13 23 阅读
.NET Core版本七牛云SDK使用

一、问题背景

  公司目前正在将一部分的业务从.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.Core,不敢用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.Core

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

        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包最好还是由官方提供,然后后面也许会继续探索性的尝试七牛的容器平台。

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

作者: Mango

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

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

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

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。