UEditor上传图片到七牛C#(后端实现)

由于个人网站空间存储有所以选择将图片统一存储到七牛上,理由很简单

1  免费10G 的容量  ,对个人网站足够用

2  规范的开发者文档 和完善的sdk(几乎所有热门语言sdk)

整体思路

图片上传七牛云 在我看来无非两种方式

1 前端表单或ajax异步提交请求到七牛服务器 ,当然此时也需要经过后端获取相应的  token (图片->七牛服务器)

2 直接后端代码请求 七牛服务器 ,官方有各版本语言的sdk 提供 ,可提高开发效率 ,降低开发难度  (图片->自己服务器->七牛服务器)

因本文介绍的是使用 ueditor 图片上传七牛云 ,  所以如果使用方式1  要改的应该是 ueditor 的js  源码文件 以及 config配置文件等信息

使用方式2 的话 需要改后台代码(ueditor 不同后台语言都有相应的源码,下载时候自带)

七牛云存储的简单介绍与使用

为了更好的理解后面的内容  我们先来了解一下七牛云存储

1. 当然首先你得注册一个七牛账号 ,然后进入进入对象存储,新建一个存储空间这个就相当于在服务器上件一个文件夹,这个很有必要后期代码中要用到。

2 建完之后你在对应存储空间找到内容管理的tab页 可以看到外链默认域名  我的是opvqiebq9.bkt.clouddn.com   这个就是到时候你图片要访问的地址比如opvqiebq9.bkt.clouddn.com/img1.jpg

3.  当然作为自己的网站肯定有自己的域名,怎么会允许自己的图片外链长这丑样呢,这时只需做一个自己网站二级域名的绑定 我用的是img.siyouku.cn

点击域名绑定tab页面,这里用普通域名就可以

4 绑定好之后绑定好一般一两小时就回生成一个要解析用的cname域名接下来还需要去你的域名提供商管理后台 添加一个cname解析 ,点这里教程

好了以上是七牛存储空间的基本设置,此时img.siyouku.cn  就相当于你的图片服务器了,接下来我们要做的就是上传图片

上传具体实现

本文使用的是上面说的第二种方式 也就是改写ueditor后端代码直接请求七牛服务器进行上传,前端方式目前网上已经有一些很好的教程

可以参考  http://www.cnblogs.com/chshapple/archive/2015/09/11/4802208.html

https://my.oschina.net/duoduo3369/blog/174655

1 首先我们要先找到七牛的C#版的SDK  ,教程非常详细 ,让我们知道怎么引用和使用基本的类库  https://developer.qiniu.com/kodo/sdk/1237/csharp

2 接下来我们定位上传文件 ,我们会发现有很多上传方式这里我们选择文件流上传作为例子,其实sdk已经帮我们做了几乎所有的事情 我们只需要把这段代码改写到你的ueditor的上传代码中就ok了 ,

代码中 重要的几个点    1.  accesskey  和secretkey  这个是在你的七牛后台管理中能找到,个人中心->密钥管理

2. buckut    这个也就是前面创建存储空间填写的唯一的名称  我这里是    siyouku

3. 还有就是saveKey  这个可以用图片的名称

 1 // 生成(上传)凭证时需要使用此Mac
 2 // 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey
 3 // 实际应用中,请自行设置您的AccessKey和SecretKey
 4 Mac mac = new Mac(Settings.AccessKey, Settings.SecretKey);
 5
 6 string bucket = "test";
 7 string saveKey = "1.jpg";
 8
 9 // 上传策略,参见
10 // https://developer.qiniu.com/kodo/manual/put-policy
11 PutPolicy putPolicy = new PutPolicy();
12
13 // 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY"
14 // putPolicy.Scope = bucket + ":" + saveKey;
15 putPolicy.Scope = bucket;
16
17 // 上传策略有效期(对应于生成的凭证的有效期)
18 putPolicy.SetExpires(3600);
19
20 // 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除
21 putPolicy.DeleteAfterDays = 1;
22
23 // 生成上传凭证,参见
24 // https://developer.qiniu.com/kodo/manual/upload-token
25
26 string jstr = putPolicy.ToJsonString();
27 string token = Auth.CreateUploadToken(mac, jstr);
28
29 try
30 {
31 string url = "http://img.ivsky.com/img/tupian/pre/201610/09/beifang_shanlin_xuejing-001.jpg";
32 var wReq = System.Net.WebRequest.Create(url) as System.Net.HttpWebRequest;
33 var resp = wReq.GetResponse() as System.Net.HttpWebResponse;
34 using (var stream = resp.GetResponseStream())
35 {
36 // 请不要使用UploadManager的UploadStream方法,因为此流不支持查找(无法获取Stream.Length)
37 // 请使用FormUploader或者ResumableUploader的UploadStream方法
38 FormUploader fu = new FormUploader();
39 var result = fu.UploadStream(stream, "xuejing-001.jpg", token);
40 Console.WriteLine(result);
41 }
42 }
43 catch (Exception ex)
44 {
45 Console.WriteLine(ex);
46 }
47 }

3 接下来我们在 ueditor 的代码文件夹下面增加一个类 来控制代码上传 七牛云 并且返回相应的文件名,新建名称为 MyUploadHandler 的控制类 ,其代码结构跟UploadHandler  一样,

在这里我们只要其中的改 Process  方法。

4  下面直接贴  process中上传的代码 ,

代码整体思路 就是将文件以流的方式通过七牛的sdk  进行上传,结合上面的上传例子应该很好理解,最后我们只需要将得到的结果反序列化返text就行

 1  public override void Process()
 2         {
 3             string uploadFileName = null;
 4             var accessKey = "填写在你七牛后台找到相应的accesskey";
 5             var secretKey = "填写在你七牛后台找到相应的secretkey";
 6             HttpPostedFile  file = Request.Files[UploadConfig.UploadFieldName];
 7             Stream myStream = file.InputStream;
 8
 9             uploadFileName = file.FileName;
10
11             if (!CheckFileType(uploadFileName))
12             {
13                 Result.State = UploadState.TypeNotAllow;
14                 WriteResult();
15                 return;
16             }
17             if (!CheckFileSize(file.ContentLength))
18             {
19                 Result.State = UploadState.SizeLimitExceed;
20                 WriteResult();
21                 return;
22             }
23             // 生成(上传)凭证时需要使用此Mac
24             // 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey
25             // 实际应用中,请自行设置您的AccessKey和SecretKey
26             Mac mac = new Mac(accessKey, secretKey);
27             string bucket = "siyouku";
28             string saveKey = uploadFileName;
29
30
31             // 使用前请确保AK和BUCKET正确,否则此函数会抛出异常(比如code612/631等错误)
32             Qiniu.Common.Config.AutoZone(accessKey, bucket, false);
33
34
35             // 上传策略,参见
36             // https://developer.qiniu.com/kodo/manual/put-policy
37             PutPolicy putPolicy = new PutPolicy();
38             // 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY"
39               putPolicy.Scope = bucket + ":" + saveKey;
40             //putPolicy.Scope = bucket;
41             // 上传策略有效期(对应于生成的凭证的有效期)
42             putPolicy.SetExpires(3600);
43             // 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除
44             putPolicy.DeleteAfterDays = 1;
45
46             // 生成上传凭证,参见
47             // https://developer.qiniu.com/kodo/manual/upload-token
48             string jstr = putPolicy.ToJsonString();
49             string token = Auth.CreateUploadToken(mac, jstr);
50             try
51             {
52                     // 请不要使用UploadManager的UploadStream方法,因为此流不支持查找(无法获取Stream.Length)
53                     // 请使用FormUploader或者ResumableUploader的UploadStream方法
54                     FormUploader fu = new FormUploader();
55                     var result = fu.UploadStream(myStream, saveKey, token);
56                 var x = Newtonsoft.Json.JsonConvert.DeserializeObject<QiniuResult>(result.Text);
57                 Result.Url = x.key;
58                Result.State = UploadState.Success;
59             }
60             catch (Exception e)
61             {
62                 Result.State = UploadState.FileAccessError;
63                 Result.ErrorMessage = e.Message;
64             }
65             finally
66             {
67                 WriteResult();
68             }
69
70         }

5 最后你会发现上传成功的图片还是不能正确在 ueditor中显示,错误如下图,查看html源码你会发现 是其路径不对,所以我们要有一个很重要的步骤 ,也就是改config.json 配置文件中的imageUrlPrefix 属性 改为你的七牛上图片的域名,也就是前面绑定的  img.siyouku.cn

ok到这里你就已经完成了editor 上传图片到 七牛云了 ,

时间: 2024-08-27 07:35:10

UEditor上传图片到七牛C#(后端实现)的相关文章

UEditor上传图片到七牛云储存(c#)

我们的网站一般放在虚拟空间或者服务器上,图片如果存在本地目录,会占用很多空间和流量,还增加了负担,好的办法是把图片存放到云储存服务里面,平时用url去拿 云储存:普遍说又拍云和七牛比较好,看到七牛免费额度很大,网上评价也挺好的,我就选了七牛 编辑器:我用的是百度的UEditor编辑器,之后需要修改一些的开放的类和js文件 下面写一下c#版本的修改方法(java版本在下一篇) 一.集成UEditor 1.在项目中加入UEditor 在UEditor的下载页,可以下载到最新的1.4.3.3 .Net

ueditor上传图片到七牛云存储(form api,java)

转:http://my.oschina.net/duoduo3369/blog/174655 ueditor上传图片到七牛云存储 ueditor结合七牛传图片 七牛的试炼 开发前的准备与注意事项说明 Let's rock 与ueditor结合前的准备工作 首先从表单开始 生成token 建立图片空间 生成token 上传流程 集成ueditor 将ueditor中的图片模块的在线管理功能和七牛结合 ueditor上传图片到七牛云存储 重要说明,本人已不做java多年,请不要加qq再问我java的

关于小程序上传图片到七牛的总结

最近在小程序中做到了头像上传这个功能,本来是挺简单的一个功能,但是这次是让我直接将图片上传到云储存,把返回的路径直接传给后台数据库存起来 emm这就很蛋疼了,一直都是处于你给我接口,我照着要求填数据就行了的那种模式,突然来一个这个操作 而且七牛的官方文档也有点难以理解,反正我是看了一下午,没看懂一堆参数,或者是初始化是怎么配置的 坑是踩的有点多吧,差点心态爆炸了,最后还是依靠的万能的百度解决的 记录一下,算是个总结吧 步骤: 1.  token还是必须要的,调取后台接口,获取到上传图片到七牛的许

onethink 后台编辑器 上传图片使用七牛驱动云存储

首先感谢这篇文章作者: http://blog.csdn.net/weishiyong/article/details/40060551 写的不是很详细,而且没有颜色标示.和我当前使用的OT1.0版本代码又不一样.所以参考参考思路还是可以的. 经过2小时的调试和修改已经成功实现. 下面把过程记录下来. 首先修改全局Config文件:  'PICTURE_UPLOAD_DRIVER'=>'QINIU', //把原来的LOCAL改成七牛 修改七牛配置文件  'UPLOAD_QINIU_CONFIG'

koa-ueditor上传图片到七牛

问题描述:服务器系统架构采用的是koa(并非koa2),客户端富文本编辑器采用的是百度的ueditor控件.现在需要ueditor支持将图片直接上传到七牛云. 前提:百度的ueditor需要在本地配置为可用,图片上传相关的配置可以参考官方文档的描述.由于服务器用的node.js,因此ueditor目录下我们只需要保留nodejs目录,其它部分如php,asp.net等都可以删掉.然后根据自己服务器的环境适当修改config.json文件中的配置. 现有方案:现有npm和github上找到的库有很

使用微信 SDK 上传图片到七牛

总体思路是:在微信下选好图片后将图片上传到微信服务器,在后端使用微信服务器返回的图片 serverId 加上调用接口的 ApiTicket 通过七牛的 fetch 接口向微信服务器下载多媒体文件的接口请求图片的二进制流,然后保存至自己七牛账号内的特定 bucket.大致过程如下: 1.调用微信 chooseImage 接口,成功后调用 uploadImage 接口 wx.chooseImage({ count: 1, sizeType: ['original', 'compressed'], s

小程序上传图片到七牛

小程序上传图片非常简单,利用好2个API: wx.chooseImage wx.uploadFile /** * 上传图片 */ chooseImageUpload() { var that = this; wx.chooseImage({ count: 1, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success: function (res) { that.tempFilePaths = r

UEditor+七牛,实现图片直连上传

最近做的项目,涉及到使用富文本编辑器,我选择了百度的UEditor.同时,我们的图片放在七牛云存储上.关于这两者间的集成,我写下一些个人的经验,与大家分享. 图片上传方案 目前来说,Web端基于七牛等云存储的图片上传方式分为以下两种: 1. 上传图片至服务端,再将数据转发至七牛. 通过服务端接受用户上传的内容,同时可以对内容进行有效性审核,拒绝不合规范的内容,然后从服务端将内容上传至七牛. 这种方法可以有效控制并记录用户提交的内容,但同时也增加了服务器的运行压力. 2. 直接上传图片至七牛,然后

简单对七牛.Net API管理文件进行简单封装的类

//封装类代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Qiniu.Conf; using Qiniu.RS; using Qiniu.RPC; using Qiniu.RSF; using Qiniu.IO; using Qiniu.IO.Resumable; using System.IO; using System.Web; using Syste