故如虹,知恩;故如月,知明
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
欢迎加群交流技术

.net上传图片到七牛云

5132人阅读 2019/7/29 15:26 总访问:3842479 评论:2 收藏:0 手机
分类: .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版本高一点的好,不会有这么多不应该有的问题。不过解决问题的思路还是可以记录一下,



欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739

评价