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)