由於之前的微軟帳號注銷,導致我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)咨詢.