在引用官方的qiniu.core的nuget是老是發生錯誤,錯誤以下,因此就在網上找到了一種解決方案,並稍微改進了一番,html
如下是引用圖:post
第一步:引用nuge優化
第二步:新建項目新建控制器視圖、添加配置信息類和讀取配置信息this
配置信息類:spa
public class QnySetting { public string qiniuyunAK { get; set; } public string qiniuyunSK { get; set; } public string qiniuyunBucket { get; set; } public string prefixPath { get; set; } }
配置信息:code
"Qny": { "qiniuyunAK": "*",//ak "qiniuyunSK": "*",//sk "qiniuyunBucket": "**",//存儲空間名稱 "prefixPath": "http://upload.qiniup.com"//七牛雲地址 }
讀取配置信息(在startup文件中的ConfigureServices添加):orm
services.Configure<QnySetting>(this.Configuration.GetSection("Qny"));
第三步:複製控制器及視圖代碼htm
視圖代碼:blog
<form method="post" action="/Upload/UploadQiniu" enctype="multipart/form-data"> <input name="file" type="file" /> <input type="submit" value="提交" /> </form>
控制器代碼:token
private readonly QnySetting _Qny; public UploadController(IOptions<QnySetting> Qny) { _Qny = Qny.Value; } public IActionResult Index() { return View(); } [HttpPost] public List<Object> UploadQiniu() { Mac mac = new Mac(_Qny.qiniuyunAK, _Qny.qiniuyunSK);// AK SK使用 PutPolicy putPolicy = new PutPolicy(); putPolicy.Scope = _Qny.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 = _Qny.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}); } else { throw new Exception(result.RefText);//上傳失敗錯誤信息 } } } return list; }
第四步:而後運行上傳圖片,結果如圖所示
上文方法來自:https://www.cnblogs.com/OMango/p/8447480.html 其中優化了一下
引用官方的Qiniu.Shared nuget包
public IActionResult UploadImgToQiNiu() { IFormFileCollection files = Request.Form.Files; Mac mac = new Mac("你的ak", "你的sk");//這裏的ak sk 也能夠像上面同樣經過配置實現 // 上傳策略,參見 // https://developer.qiniu.com/kodo/manual/put-policy PutPolicy putPolicy = new PutPolicy(); // 若是須要設置爲"覆蓋"上傳(若是雲端已有同名文件則覆蓋),請使用 SCOPE = "BUCKET:KEY" // putPolicy.Scope = bucket + ":" + saveKey; putPolicy.Scope = "上傳儲存的空間名稱";//能夠像上文同樣配置 // 上傳策略有效期(對應於生成的憑證的有效期) putPolicy.SetExpires(3600); // 上傳到雲端多少天后自動刪除該文件,若是不設置(即保持默認默認)則不刪除 // putPolicy.DeleteAfterDays = 1; string jstr = putPolicy.ToJsonString(); //獲取上傳憑證 var uploadToken = Auth.CreateUploadToken(mac, jstr);
//false 使用https 自動識別存儲空間
Qiniu.Common.Config.AutoZone(_qiniu.qiniuyunAK, _qiniu.qiniuyunBucket, false);
UploadManager um = new UploadManager(); foreach (IFormFile file in files)//獲取多個文件列表集合 { if (file.Length > 0) { Stream stream = file.OpenReadStream(); var fileName = ContentDispositionHeaderValue .Parse(file.ContentDisposition) .FileName .Trim('"'); var saveKey = "http://upload.qiniup.com" + "/" + DateTime.Now.ToString("yyyyMMddHHmmssffffff") + fileName;//重命名文件加上時間戳 其中上傳地址也能夠配置 HttpResult result = um.UploadStream(stream, saveKey, uploadToken); if (result.Code == 200) { return Json(result.Text); } else { throw new Exception(result.RefText);//上傳失敗錯誤信息 } } } return null; }
若有問題,歡迎指正