.net上传图片到七牛云
电脑版发表于:2019/7/29 15:26
传送门:
net core上传图片到七牛云地址:http://www.tnblog.net/aojiancc2/article/details/2441
c# sdk地址:https://developer.qiniu.com/kodo/sdk/1237/csharp#qiniu-sdk-dll
先下载七牛云依赖:Install-Package Qiniu
然后编写上传图片到七牛云的工具类代码:
这个代码我是单独放到一个类库的不是放到mvc那一层的,原因嘛.....主要是因为那个vs版本有点低直接下载依赖有问题就想着单独用一个类库来试试,不断的try
public int UploadImgToQiNiu(HttpPostedFileBase file) { // IFormFileCollection files = Request.Form.Files; //这里的ak sk 可以写到配置文件中方便修改 Mac mac = new Mac("你的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("你的ak", "存储空间名称", false); UploadManager um = new UploadManager(); Stream stream = file.InputStream; //var fileName = ContentDispositionHeaderValue //.Parse(file.ContentDisposition) //.FileName //.Trim('"'); string fileName = file.FileName.Substring(file.FileName.LastIndexOf('.')); //文件扩展名 //DateTime.Now.ToString("yyyyMMddHHmmssffffff") var saveKey = "yuanqu/" + Guid.NewGuid().ToString("N") + fileName;//重命名文件加上时间戳 其中上传地址也可以配置s HttpResult result = um.UploadStream(stream, saveKey, uploadToken); return result.Code; //if (result.Code == 200) //{ // return 200; //} //else //{ // throw new Exception(result.RefText);//上传失败错误信息 //} }
然后就是在上传图片的控制器里边去调用它即可
[HttpPost] public ActionResult DoUpYuanQuImg() { UserInfo ui = Session["User"] as UserInfo; UpLoadImg upLoadImg = new UpLoadImg(); for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; int resultcode = upLoadImg.UploadImgToQiNiu(file); //YuanQuImg yuanQuImg = new YuanQuImg(); //yuanQuImg.PostDate = DateTime.Now; //yuanQuImg.IsPass = 1; //yuanQuImg.UserId = ui.UserId; } return Json(1); }
记录下遇到的坑:
1:下载库的问题:受制于vs版本nuget版本问题,不能直接下载
解决办法:既然不能直接通过nuget下载我就去官网下载好,然后直接引入进去
2:七牛云上传库遇到的json序列化问题
本来准备看看他里边用到json序列化源码的,我猜测着这个库应该是依赖与主库Newtonsoft.Json.dll的版本,七牛云依赖的是9.0.0.0主库比这个低,于是准备把主库的也换成9.0.0.0这个版本,于是又报错了:也是一个版本不一样PublicKeyToken=30ad4fe6b2a6aeed什么什么的
解决办法:
在webconfig中加入配置
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
然后删除掉packages.config中Newtonsoft.Json.dll的配置
搞定!
tip:还是用vs版本高一点的好,不会有这么多不应该有的问题。不过解决问题的思路还是可以记录一下,