50010702506256
分类:
.NET
传送门:
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)