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

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  这个可以用图片的名称

 // 生成(上传)凭证时需要使用此Mac
// 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey
// 实际应用中,请自行设置您的AccessKey和SecretKey
Mac mac = new Mac(Settings.AccessKey, Settings.SecretKey); string bucket = "test";
string saveKey = "1.jpg"; // 上传策略,参见
// https://developer.qiniu.com/kodo/manual/put-policy
PutPolicy putPolicy = new PutPolicy(); // 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY"
// putPolicy.Scope = bucket + ":" + saveKey;
putPolicy.Scope = bucket; // 上传策略有效期(对应于生成的凭证的有效期)
putPolicy.SetExpires(); // 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除
putPolicy.DeleteAfterDays = ; // 生成上传凭证,参见
// https://developer.qiniu.com/kodo/manual/upload-token string jstr = putPolicy.ToJsonString();
string token = Auth.CreateUploadToken(mac, jstr); try
{
string url = "http://img.ivsky.com/img/tupian/pre/201610/09/beifang_shanlin_xuejing-001.jpg";
var wReq = System.Net.WebRequest.Create(url) as System.Net.HttpWebRequest;
var resp = wReq.GetResponse() as System.Net.HttpWebResponse;
using (var stream = resp.GetResponseStream())
{
// 请不要使用UploadManager的UploadStream方法,因为此流不支持查找(无法获取Stream.Length)
// 请使用FormUploader或者ResumableUploader的UploadStream方法
FormUploader fu = new FormUploader();
var result = fu.UploadStream(stream, "xuejing-001.jpg", token);
Console.WriteLine(result);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}

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

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

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

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

  public override void Process()
{
string uploadFileName = null;
var accessKey = "填写在你七牛后台找到相应的accesskey";
var secretKey = "填写在你七牛后台找到相应的secretkey";
HttpPostedFile file = Request.Files[UploadConfig.UploadFieldName];
Stream myStream = file.InputStream; uploadFileName = file.FileName; if (!CheckFileType(uploadFileName))
{
Result.State = UploadState.TypeNotAllow;
WriteResult();
return;
}
if (!CheckFileSize(file.ContentLength))
{
Result.State = UploadState.SizeLimitExceed;
WriteResult();
return;
}
// 生成(上传)凭证时需要使用此Mac
// 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey
// 实际应用中,请自行设置您的AccessKey和SecretKey
Mac mac = new Mac(accessKey, secretKey);
string bucket = "siyouku";
string saveKey = uploadFileName; // 使用前请确保AK和BUCKET正确,否则此函数会抛出异常(比如code612/631等错误)
Qiniu.Common.Config.AutoZone(accessKey, bucket, false); // 上传策略,参见
// https://developer.qiniu.com/kodo/manual/put-policy
PutPolicy putPolicy = new PutPolicy();
// 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY"
putPolicy.Scope = bucket + ":" + saveKey;
//putPolicy.Scope = bucket;
// 上传策略有效期(对应于生成的凭证的有效期)
putPolicy.SetExpires();
// 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除
putPolicy.DeleteAfterDays = ; // 生成上传凭证,参见
// https://developer.qiniu.com/kodo/manual/upload-token
string jstr = putPolicy.ToJsonString();
string token = Auth.CreateUploadToken(mac, jstr);
try
{
// 请不要使用UploadManager的UploadStream方法,因为此流不支持查找(无法获取Stream.Length)
// 请使用FormUploader或者ResumableUploader的UploadStream方法
FormUploader fu = new FormUploader();
var result = fu.UploadStream(myStream, saveKey, token);
var x = Newtonsoft.Json.JsonConvert.DeserializeObject<QiniuResult>(result.Text);
Result.Url = x.key;
Result.State = UploadState.Success;
}
catch (Exception e)
{
Result.State = UploadState.FileAccessError;
Result.ErrorMessage = e.Message;
}
finally
{
WriteResult();
} }

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

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

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

  1. UEditor上传图片到七牛云储存(java)

    我们的网站一般放在虚拟空间或者服务器上,图片如果存在本地目录,会占用很多空间和流量,还增加了负担,好的办法是把图片存放到云储存服务里面,平时用url去拿 云储存:普遍说又拍云和七牛比较好,看到七牛免费 ...

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

    我们的网站一般放在虚拟空间或者服务器上,图片如果存在本地目录,会占用很多空间和流量,还增加了负担,好的办法是把图片存放到云储存服务里面,平时用url去拿 云储存:普遍说又拍云和七牛比较好,看到七牛免费 ...

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

    转:http://my.oschina.net/duoduo3369/blog/174655 ueditor上传图片到七牛云存储 ueditor结合七牛传图片 七牛的试炼 开发前的准备与注意事项说明 ...

  4. axios上传图片(及vue上传图片到七牛))

    浏览器上传图片到服务端,我用过两种方法: 1.本地图片转换成base64,然后通过普通的post请求发送到服务端. 操作简单,适合小图,以及如果想兼容低版本的ie没办法用此方法 2.通过form表单提 ...

  5. koa-ueditor上传图片到七牛

    问题描述:服务器系统架构采用的是koa(并非koa2),客户端富文本编辑器采用的是百度的ueditor控件.现在需要ueditor支持将图片直接上传到七牛云. 前提:百度的ueditor需要在本地配置 ...

  6. node+express上传图片到七牛

    本人微信公众号:前端修炼之路,欢迎关注 最近做项目的时候有一个上传图片的需求,由于没有后端的配合,所以决定自己来搭个服务器,实现上传图片功能.以后如果需要修改成java或者php为后端,直接使用即可, ...

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

    总体思路是:在微信下选好图片后将图片上传到微信服务器,在后端使用微信服务器返回的图片 serverId 加上调用接口的 ApiTicket 通过七牛的 fetch 接口向微信服务器下载多媒体文件的接口 ...

  8. JAVA简单上传图片至七牛

    utils package com.example.demo.utils; import com.alibaba.fastjson.JSONObject; import com.qiniu.commo ...

  9. vue项目中使用element ui上传图片到七牛

    1.获取token值 后台有接口调用直接返回token值 //请求后台拿七牛云token async getQiniuToken() { //token let uploadtoken = await ...

随机推荐

  1. 将 shell 脚本打包到 rpm 包中

    下以操作最好在虚拟机上操作:如 Docker 最方便了 1. 安装 rpmbuild yum -y install rpmbuild  rpmdevtools -y 2. 生成打包路径 使用 rpmd ...

  2. es6中的let声明变量与es5中的var声明变量的区别,局部变量与全局变量

    自己通过看typescript官方文档里的let声明,与阮一峰老师翻译的的es6学习文档,总结以下三点 1.var声明可以多次重复声明同一个变量,let不行 2.let变量只在块级作用域里面有效果,v ...

  3. 一个web应用的诞生(10)--关注好友

    下面回到首页中,使用一个账户登录,你肯定已经注意到了这里的内容: 没错,现在都是写死的一些固定信息,其中分享数量很容易就可以获取,只需要修改首页模板: <p class="text-m ...

  4. kafka 入门笔记 #1

    kafka 入门笔记(#1) 单机测试 下载版本,解压 tar -xzf kafka_2.11-0.10.1.1.tgz cd kafka_2.11-0.10.1.1 启动服务 Kafka用到了Zoo ...

  5. Linux之环境变量

    1. 变量的显示与设置 显示变量 echo \(PATH</font></code><br/> 取消变量 <code><font color=&q ...

  6. Android -- 贝塞尔二阶实现饿了么加入购物车效果

    1,上周我们实现了简单的三阶贝塞尔曲线效果实例,今天是使用二阶贝塞尔曲线加动画实现的加入购物车效果,在码代码过程中出现了些问题,过一下和大家来探讨探讨,先看一下效果图 2,从上面的效果来看我们基本上可 ...

  7. (转)Python 遍历List三种方式

    转自: http://www.cnblogs.com/pizitai/archive/2017/02/14/6398276.html # 方法1 print '遍历列表方法1:' for i in l ...

  8. mysql加密解密方式用法

    如果你使用的正是mysql数据库,那么你把密码或者其他敏感重要信息保存在应用程序里的机会就很大.保护这些数据免受黑客或者窥探者的获取是一个令人关注的重要问题,因为你既不能让未经授权的人员使用或者破坏应 ...

  9. PHPexcel数据导出

    使用PHPexcel数据导出,可以从网上下载phpexcel引入使用,下面是我做的简单的数据导出练习 一.下载phpexcel 二.引发这个导出(我这里是写了一个简单的点击事件) <div id ...

  10. 数据库问题(程序连接mysql错误)

    今天服务器遇到了一个很熟悉的问题 输入 #mysql -u root -p ERROR 2002 (HY000):Can't connect to local MySQL server 随即上网找寻答 ...