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)諮詢.