


传送门:
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版本高一点的好,不会有这么多不应该有的问题。不过解决问题的思路还是可以记录一下,
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)