应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net上传图片到七牛云

6559人阅读 2019/7/29 15:26 总访问:5182361 评论: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

  1. public int UploadImgToQiNiu(HttpPostedFileBase file)
  2.         {
  3.             // IFormFileCollection files = Request.Form.Files;
  4.             //这里的ak sk 可以写到配置文件中方便修改
  5.             Mac mac = new Mac("你的ak""你的sk");
  6.             // 上传策略,参见 
  7.             // https://developer.qiniu.com/kodo/manual/put-policy
  8.             PutPolicy putPolicy = new PutPolicy();
  9.             // 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY"
  10.             // putPolicy.Scope = bucket + ":" + saveKey;  
  11.             //上传储存的空间名称
  12.             putPolicy.Scope = "存储空间名称";
  13.             // 上传策略有效期(对应于生成的凭证的有效期)          
  14.             putPolicy.SetExpires(3600);
  15.             // 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除
  16.             // putPolicy.DeleteAfterDays = 1;
  17.             string jstr = putPolicy.ToJsonString();
  18.             //获取上传凭证
  19.             var uploadToken = Auth.CreateUploadToken(mac, jstr);
  20.             //false 使用https 自动识别存储空间            
  21.             Qiniu.Common.Config.AutoZone("你的ak""存储空间名称"false);
  22.             UploadManager um = new UploadManager();
  23.             Stream stream = file.InputStream;
  24.             //var fileName = ContentDispositionHeaderValue
  25.             //.Parse(file.ContentDisposition)
  26.             //.FileName
  27.             //.Trim('"');
  28.             string fileName = file.FileName.Substring(file.FileName.LastIndexOf('.')); //文件扩展名
  29.             //DateTime.Now.ToString("yyyyMMddHHmmssffffff")
  30.             var saveKey = "yuanqu/" + Guid.NewGuid().ToString("N") + fileName;//重命名文件加上时间戳 其中上传地址也可以配置s   
  31.             HttpResult result = um.UploadStream(stream, saveKey, uploadToken);
  32.             return result.Code;
  33.             //if (result.Code == 200)
  34.             //{
  35.             //    return 200;
  36.             //}
  37.             //else
  38.             //{
  39.             //    throw new Exception(result.RefText);//上传失败错误信息
  40.             //}
  41.         }

然后就是在上传图片的控制器里边去调用它即可

  1. [HttpPost]
  2. public ActionResult DoUpYuanQuImg()
  3. {
  4.     UserInfo ui = Session["User"as UserInfo;
  5.     UpLoadImg upLoadImg = new UpLoadImg();
  6.     for (int i = 0; i < Request.Files.Count; i++)
  7.     {
  8.         var file = Request.Files[i];
  9.         int resultcode = upLoadImg.UploadImgToQiNiu(file);
  10.         //YuanQuImg yuanQuImg = new YuanQuImg();
  11.         //yuanQuImg.PostDate = DateTime.Now;
  12.         //yuanQuImg.IsPass = 1;
  13.         //yuanQuImg.UserId = ui.UserId;
  14.     }
  15.     return Json(1);
  16. }


记录下遇到的坑:

1:下载库的问题:受制于vs版本nuget版本问题,不能直接下载

解决办法:既然不能直接通过nuget下载我就去官网下载好,然后直接引入进去


2:七牛云上传库遇到的json序列化问题

本来准备看看他里边用到json序列化源码的,我猜测着这个库应该是依赖与主库Newtonsoft.Json.dll的版本,七牛云依赖的是9.0.0.0主库比这个低,于是准备把主库的也换成9.0.0.0这个版本,于是又报错了:也是一个版本不一样PublicKeyToken=30ad4fe6b2a6aeed什么什么的


解决办法:

在webconfig中加入配置

  1.   <runtime>
  2.      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  3.       <dependentAssembly>
  4.                 <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  5.                 <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />           
  6.       </dependentAssembly>   
  7.     </assemblyBinding>
  8.      
  9.   </runtime>

然后删除掉packages.config中Newtonsoft.Json.dll的配置


搞定!

tip:还是用vs版本高一点的好,不会有这么多不应该有的问题。不过解决问题的思路还是可以记录一下,



欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

cAPS.net 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request[&quot;imgBase&quot;]; //c#里边的base6...

Quartz.net实例动态改变周期调度。misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.net Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

c、VB.net中全角半角转换方法

///&lt;summary&gt; ///转全角的函数(SBCcase) ///&lt;/summary&gt; ///&lt;paramname=&quot;input&quot;&gt;任意字符串...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

C.net 配合小程序实现经过第三方服务器中转文件

某些时候,微信小程序前段上传文件的时候需要经过第三方服务器再将文件上传到客户的服务器;操作如下:1:(小程序内向中端服...

.net实现QQ邮箱发送邮件功能

1、微软已经帮我们封装好了发送邮件的类MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。Mai...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

windows 自带的netsh进行端口映射

使用netsh 把本地任意ip的25566端口 映射到192.168.81.234的25565端口netshinterfaceportproxyaddv4tov4listenaddress=0.0....

确保.net程序始终以管理员身份运行

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...

ASP.net Timer细节处理

Timer的用法:1:本人称之为计时器,是asp.net官方的一种。用法即是计时所用 2:关于计时有很多中方式,本人学识有限,暂...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

asp.net主动推送百度seo

虽然可以使用百度提供的js自动推送,但是估计度娘还是希望主动推送一点。哈哈^_^,女孩子嘛大多都喜欢被动一点。publicclass...