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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM