博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己动手开发更好用的markdown编辑器-05(粘贴上传图片)
阅读量:4343 次
发布时间:2019-06-07

本文共 4884 字,大约阅读时间需要 16 分钟。

这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 
 
文章目录

我们实现了实时预览功能.

今天这篇要利用免费的七牛云存储服务来实现粘贴自动上传图片的功能.

不想看过程的朋友可以直接下载使用,使用之前记得.

文章的内容包含以下三点:

  1. .
  2. ajax文件上传

七牛云存储

系统设置

首先在系统设置里增加七牛空间设置部分,这里就简单的贴上代码,因为系统设置模块之前几篇了都讲过了.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
...   //默认设置   var defaultSystemData = {
//最后一次打开的文件 lastFile: null, //编辑器样式 theme:'ambiance', //预览窗口样式 preViewTheme:'github', //预览代码块样式 preViewHighLightTheme:'default', /*七牛空间设置*/ accessKey:'', secretKey:'', //空间名称 bucketName:'test', //空间访问地址 bucketHost:'7xit3a.com1.z0.glb.clouddn.com', //过期时间,从设置之后多少小时过期. deadline:1000 };

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
...     
...

 

增加了accesskey,secretkey,空间名,过期时间四个用于上传图片的字段. 其中accesskey, secretkey用于验证权限,空间名用于指定上传图片的存储空间,过期时间指定授权的过期时间. 这四个字段共同组成上传授权的Token,生成的方法如下:

安装七牛nodejs版sdk

1
npm install qiniu --save

 

1 2 3 4 5 6 7 8 9 10 11 12
...   //生成七牛存储空间token   system.qiniuKeygen = function(systemSetting){
var qiniu = require('../app/node_modules/qiniu'); qiniu.conf.ACCESS_KEY = systemSetting.accessKey; qiniu.conf.SECRET_KEY = systemSetting.secretKey; var putPolicy = new qiniu.rs.PutPolicy(systemSetting.bucketName); putPolicy.expires = Math.round(new Date().getTime() / 1000) + systemSetting.deadline * 3600; systemSetting.qiniutoken = putPolicy.token(); return systemSetting; }; ...

 

配置七牛帐号

首先得注册一个.

进入后台,新建一个空间,我这里取的空间名为blog,用于我博客的图片存储.

选择新建的空间,点击空间设置>域名设置,查看自动分配的域名

回到后台首页,点击账号设置,可以查看accessKey(AK)SecretKey(SK)

在刚做好的后台里配置好这几个字段

我把我空间的密钥遮住了,大家请填上自己的空间密钥

图片上传

图片的存储空间准备好了,现在来实现上传的功能.

初始化editor的时候传入七牛的token

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
... studio.directive('hmdEditor', function () {
return function ($scope, elem) {
var systemData = hmd.system.get(); hmd.editor.init({
el:elem[0], theme:systemData.theme, //七牛云存储授权 qiniuToken:hmd.system.qiniuKeygen(systemData).qiniutoken, //空间的域名 bucketHost:systemData.bucketHost },systemData.lastFile); //保存最后一次打开的文件 hmd.editor.on('setFiled',function(filepath){
hmd.system.setLastFile(filepath); }); ...

 

里实现图片上传功能

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
... initQiniu:function(options){
this.qiniuToken = options.qiniuToken; this.bucketHost = options.bucketHost; //监听粘贴事件 $('.studio-wrap')[0].onpaste = this.uploadImage.bind(this); }, uploadImage:function(ev){
var clipboardData, items, item; if(!this.qiniuToken){
this.fire('error',{msg:'未设置七牛密钥,无法上传图片'}); } //如果粘贴的是图片 else if (ev && (clipboardData = ev.clipboardData) && (items = clipboardData.items) && (item = items[0]) && item.kind == 'file' && item.type.match(/^image\//i)) {
//取图片数据 var blob = item.getAsFile(); //生成随机的图片名 var fileName = this.guid() + '.' + blob.type.split('/')[1]; //上传 this._qiniuUpload(blob, this.qiniuToken, fileName, function (blkRet) {
//生成markdown格式的图片地址 var img = '![](http://'+this.bucketHost+'/' + blkRet.key + ')'; //在光标处插入图片 this.cm.doc.replaceSelection(img); }.bind(this)); return false; } }, //上传图片,参数为:图片2进制内容,七牛token,文件名,回调函数 _qiniuUpload:function (f, token, key,fn) {
var xhr = new XMLHttpRequest(); //创建表单 xhr.open('POST', 'http://up.qiniu.com', true); var formData, startDate; formData = new FormData(); if (key !== null && key !== undefined) formData.append('key', key); formData.append('token', token); formData.append('file', f); var taking; xhr.onreadystatechange = function (response) {
//上传成功则执行回调 if (xhr.readyState == 4 && xhr.status == 200 && xhr.responseText) {
var blkRet = JSON.parse(xhr.responseText); fn(blkRet); } else if (xhr.status != 200 && xhr.responseText) {
if(xhr.status == 631){
hmd.editor.fire('error',{msg:'七牛空间不存在.'}); } else{
hmd.editor.fire('error',{msg:'七牛设置错误.'}); } } }; startDate = new Date().getTime(); //提交数据 xhr.send(formData); } ...

至此这个功能就完成了,随便截张图然后在编辑器里粘贴,编辑器就会自动生成图片引用地址:

这个功能较为简单,因此今天篇幅较小.

总结

粘贴上传图片的功能让我不用频繁的停下来上传图片,可以大大的提高用markdown写文章的效率.

目前功能还较为简单,不能指定图片名,不能分目录,大家可以根据自己的需求修改代码,完善功能.

接下来的计划:

  1. 自动更新.
  2. 云同步.
  3. 插件机制
  4. 表情插件.

附件

,七牛云存储未设置好,请自行根据设置.

转载于:https://www.cnblogs.com/honghongming/p/4494282.html

你可能感兴趣的文章
JS中各种跳转解析
查看>>
JAVA 基础 / 第八课:面向对象 / JAVA类的方法与实例方法
查看>>
Ecust OJ
查看>>
P3384 【模板】树链剖分
查看>>
Thrift源码分析(二)-- 协议和编解码
查看>>
考勤系统之计算工作小时数
查看>>
4.1 分解条件式
查看>>
Equivalent Strings
查看>>
收藏其他博客园主写的代码,学习加自用。先表示感谢!!!
查看>>
H5 表单标签
查看>>
C语言编程-9_4 字符统计
查看>>
在webconfig中写好连接后,在程序中如何调用?
查看>>
限制用户不能删除SharePoint列表中的条目(项目)
查看>>
feign调用spring clound eureka 注册中心服务
查看>>
ZT:Linux上安装JDK,最准确
查看>>
LimeJS指南3
查看>>
关于C++ const成员的一些细节
查看>>
《代码大全》学习摘要(五)软件构建中的设计(下)
查看>>
C#检测驱动是否安装的问题
查看>>
web-4. 装饰页面的图像
查看>>