自己做了一个网站,编辑器用的是KindEditor,平时会涉及到KindEditor自带的图片上传,但是服务器用的是虚拟主机,没多少空间,就一直想着把图片放在免费的云存储空间,之前看KindEditor的源码和七牛的SDK看得云里雾里的,网上搜索又没有类似的解决方法,只好继续看源码自己搞了,弄了整整一个晚上,基本实现了,下面说说我的做法:

版本说明:

KindEditor版本:4x

七牛SDK:7.x.x

后端脚本:PHP

先看一下七牛给出的表单模板,在这里file和token这两个表单项是必须的

1.修改KindEditor的plugins/image/image.js文件

在第20行这里把上传文件的name字段改成和七牛的一致,即name="file",注释的那行是原代码

第二处改动是本地图片上传部分,这里只做本地图片上传的修改,其他都是类似的,包括文件的上传

将action的地址改为七牛的上传入口:http://upload.qiniu.com/,原本的处理地址是/php/upload_json.php

添加一个隐藏的表单项:<input name="token" class="qiniu_token" value="" style="display:none;"/>

至于file项这里看不到是因为它是另外加载的,就是hiddenElements.join('');这个,前面已经把file的name改了就好了

到这里,我们已经把基本的表单项添加到KindEditor了,但是token现在并没有value,接下来是实现ajax向服务器获取token

我的做法是直接在image.js这个文件的末尾写了个获取的token的函数:

这里因为是异步的方式,我只好使用jQuery去更改上面token的value,当然,用原生js实现会更好,不用去加载jQuery,我自己用getElementById去直接设置value貌似不行,折腾了好久不知道什么原因,本来jQuery的用的是val()方法也不奏效,只好给成attr()

上面这个是上传之后的回调函数,返回的数据是json格式,两个参数,当然后面添加处理回调的程序,回调参数个数可以自行设置

上传成功:

{"error":0,"url":"https:\/\/dn-lanbaidiao.qbox.me\/FryyQrpKYDDZrkJGWchh9_9og6Du"}

上传失败:

{"error":1,"message":"xxx错误信息"}

ps,这个函数不需要做任何修改,视个人情况而定,这里只是做一下说明

到这里,KindEditor就修改完成了,接下来是修改七牛的php文件以及增加一个callBack.php和getToken.php

2.后端代码的修改

先下载七牛的SDK源码,我这里使用的是PHP的:七牛SDK(PHP版本)

目录结构是这样

主要修改src/Qiniu/Auth.php这个文件,并在相同目录下添加callBack.php和getToken.php,即

#1 Auth.php

主要是添加一个可以自己处理上传事件的回调文件,即callBack.php,这里要注意的是回调地址必须和网站地址同个域名下,不然js会报跨域错误,因为KindEditor使用的是frame来处理图片上传,这也是为什么我不直接用七牛的回调而是自己写一个,我在这里琢磨了好久才发现

要用自己的回调的前提是要让七牛的回调地址跳转到你的回调地址,并把回调参数传给你的回调程序,所以添加一个returnUrl

接下来先写getToken.php即生成你的七牛token,如果不知道七牛的使用原理,建议先去看一下官方文档:七牛文档

然后是callBack.php(代替了原来kindEditor的upload_json.php的作用),自己根据情况设置参数,但要和image.js保持一致性

最后再用kindEditor测试一下图片上传,地址已经变成了七牛云存储的地址了,大大减轻了自己服务器流量和存储空间的压力

KindEditor图片上传到七牛云的更多相关文章

  1. 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间

    现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...

  2. vue图片上传到七牛云

    代码: <template> <div class="upload-info"> <div> <el-upload class=" ...

  3. django + ckeditor + 七牛云,图片上传到七牛云

    传送门 本人使用的是 Django 的自带的管理后台,安装 ckeditor 富文本编辑器后,上传图片的时候直接传到七牛云的.

  4. 图片上传到七牛云/阿里云的OSS

    1.准备 七牛云/阿里云OSS https://github.com/pfinal/storage 2.composer安装包 安装 composer require pfinal/storage 本 ...

  5. laravel7文件上传至七牛云并保存在本地图片

    HTML代码: <form class="layui-form" action="{{route('doctor.store')}}" method=&q ...

  6. 微信小程序文件上传至七牛云(laravel7)

    1 wxml: <view> <form bindsubmit="dopost"> <view> <label>真实姓名</l ...

  7. kindeditor图片上传 struts2实现

    一.kindeditor以及struts2部署搭建不再赘述,如需要请参考kindeditor使用方法 Struts2框架搭建 二.kindeditor图片上传所依赖jar包在kindeditor\js ...

  8. .Net Core实现将文件上传到七牛云存储

    功能:将图片上传到七牛云存储 准备工作 注册七牛账号,提交实名认证(基本上1天内内审核通过) 登录七牛后台->对象存储->新建空间 (基本概念:https://developer.qini ...

  9. 阿里云CentOS自动备份MySql 8.0并上传至七牛云

    本文主要介绍一下阿里云CentOS7下如何对MySql 8.0数据库进行自动备份,并使用.NET Core 将备份文件上传至七牛云存储上,并对整个过程所踩的坑加以记录. 环境.工具.准备工作 服务器: ...

随机推荐

  1. 在Windows上,如何卸载RabbitMQ服务

    打开运行->CMD->sc delete RabbitMQ 如果报错..... 打开运行->regedit 找到RabbitMQ节点,删掉即可.(右侧看到的都是启动服务时,需要的配置 ...

  2. 在线教育服务:http://www.ablesky.com/

    在线教育服务:http://www.ablesky.com/

  3. AppServ 配置还是成功了

    安装就不说了,一键式安装,还不错. 首先,登陆密码吧,用户是root ,密码是空: 之前创建的databases都还在, 可以用phpmyadmin管理,不在输入复杂的命令了, 方便,继续鼓捣php.

  4. Cocos2d-x——Cocos2d-x 屏幕适配总结

    本张图以iPhone5为例子,并且采用ResolutionNoBorder的绘制方式(这种方式就是会在原图的基础上出现裁切,一部分图片会显示到屏幕外边去,如AEHD和FBCG就是显示到屏幕外边的内容) ...

  5. 【不积跬步,无以致千里】linux下如何查看自己的外网IP

    局域网的服务器是通过ADSL路由器连接外网的,但ADSL是从ISP运营商那儿通过动态获得IP的,那么我怎么知道自己的外网地址是多少呢?今天得到几个办法:curl -s http://whatismyi ...

  6. ADO.NET 快速入门(二):执行命令

    Commands发出针对数据库的数据存储动作.例如,你可以执行一条命令插入或者删除数据.获取更多从数据库移动数据相关的信息,请参考“Update a Database from a DataSet”. ...

  7. java虚拟机JVM学习笔记-基础知识

    最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--java虚拟机 媒介:JVM是每一位从事Java开发工程师必须翻越的一座大山! JVM(Java Virtual Machine)JRE ...

  8. String类的实现

    1.在类中可以访问private成员包括两层含义:可以访问this指针的private成员:可以访问同类对象的private成员. 2.这里的String可以认为是个资源管理类,内部有个char指针, ...

  9. 进程和cpu的相关知识和简单调优方案

    进程就是一段执行的程序,每当一个程序执行时.对于操作系统本身来说,就创建了一个进程,而且分配了相应的资源.进程能够分为3个类别:     1.交互式进程(I/O)     2.批处理进程 (CPU) ...

  10. IOS键盘弹出、隐藏

    IOS键盘 UIKeyboardFrameBeginUserInfoKey:动画开始前键盘的size UIKeyboardFrameEndUserInfoKey:动画结束后键盘的size - (voi ...