1、问题背景html
公司目前正在将一部分的业务从.NET平台准备迁移到.NET Core上去,同时也准备启用docker进行.NET Core的部署,在项目迁移过程当中,不可避免的碰到有些SDK只有在.NET Framework下有,而.NET Core没有的状况,而七牛就是碰到的其中一个,以前在nuget上看到qiniu的官方SDK引用进来后,会提醒你该sdk是基于.NET Framework版本,那若是部署在IIS下是没问题的,可是若是部署在linux下,那就跑不起来了,基于此,也为了之后方便其余项目的迁移,就捣鼓了一个.NET Core版本的七牛SDK,基于官方最新7.3的版本。linux
2、修改说明git
废话很少说,上代码,啊呸先上连接https://github.com/Hello-Mango/MQiniu.Core,这是我已经编译好的代码,而且已经上传NUGET(搜索MQiniu.Core,不敢用qiniu.core这个名字,以为最好仍是官方能够出一个)github
修改方案实际上是很是简单的,官方的sdk源码语法上跟.NET Core其实就是同样的,最终须要修改的是HttpManager.cs文件中将docker
wReq.ServicePoint.Expect100Continue = false;
修改成app
ServicePointManager.Expect100Continue = false;
若是不修改的话,会出现报错状况,具体啥报错给忘记了,这个也是我后来查找到的解决方案,若是有朋友有更好的解决方案,也麻烦请告知。微服务
如下是引用图:测试
能够看到使用MQiniu.Core时不会提示已使用.NETFrameWorkspa
3、具体使用.net
若是你们想本身尝试的话,能够下载官方的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; }
4、总结
目前使用下来,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)咨询.