Markdown在线预览
来源:互联网 发布:淘宝联盟怎么走返利 编辑:程序博客网 时间:2024/06/04 00:57
Markdown在线预览上线了,拖动文件或者点击上传markdown文件就可以预览了。
服务器不保存文件副本,只是将上传的文件内容转换为html格式显示在网页上。
点击地址访问:3inns.cn/mdviewer
前端实现
支持拖拽和点击打开文件夹选择文件的方式
html代码
<div id="content"> <div id="dropbox"> <h1>Drop file here or click to upload</h1> <h3>(The server does not keep a copy)</h3> <h4 id="tips"></h4> </div> <div id="result"></div> <input type="file" id="inputfile" name="file" style="display:none"/> </div>
js代码
<script> var dropbox = document.getElementById("dropbox"); dropbox.addEventListener("click", openfile, false); dropbox.addEventListener("dragenter", dragenter, false); dropbox.addEventListener("dragover", dragover, false); dropbox.addEventListener("drop", drop, false); $('#inputfile').change(function() { upload($('#inputfile').get(0).files); }) function openfile(e) { $('#inputfile').click(); } function dragenter(e) { e.stopPropagation(); e.preventDefault(); } function dragover(e) { e.stopPropagation(); e.preventDefault(); } function drop(e) { e.stopPropagation(); e.preventDefault(); upload(e.dataTransfer.files); } var tips = $('#tips'); function upload(files) { if (files === undefined) { return; } if (files.length !== 1) { tips.text('Tips:Only one file can be uploaded.'); return; } var fileObj = files[0]; if (fileObj.size > 5 * 1024 * 1024) { tips.text('Tips:No more than 5M.'); return; } var FileController = "../mdfile"; // 接收上传文件的后台地址 var form = new FormData(); form.append("author", "3inns.cn"); form.append("file", fileObj); // 文件对象 var xhr = new XMLHttpRequest(); xhr.open("post", FileController, true); xhr.onload = function (e) { console.log('over'); }; xhr.onreadystatechange = function() { $('#dropbox').hide(); $('#result').html(xhr.responseText); } xhr.upload.addEventListener("progress", function(evt) { if (evt.lengthComputable) { var percentComplete = Math.round(evt.loaded * 100 / evt.total); console.log(percentComplete); tips.text('Tips:' + percentComplete + '%'); } else { tips.text('Upload failed!'); } }, false); xhr.send(form); } </script>
后台实现
使用的是koa2
引入koaBody模块
const koaBody = require('koa-body');...app.use(koaBody({ multipart: true }))
路由以及实现
使用marked模块转换markdown文本为html格式
app.use(route.get('/mdviewer', Extends.mdviewer))app.use(route.post('/mdfile', Extends.mdfile))// Extends对象module.exports.mdviewer = async function(ctx) { ctx.body = await ctx.render('md_viewer');}const readFilePromise = (path) => { return new Promise((resolve, reject) => { fs.readFile(path, 'utf8', (err, data) => { if (err) { return reject(); } return resolve(data); }) })}module.exports.mdfile = async function(ctx, next) { if ('POST' != ctx.method) { return await next(); } if (ctx.request.body.files && ctx.request.body.files.file) { const author = ctx.request.body.fields.author; const file = ctx.request.body.files.file; const content = await readFilePromise(file.path); if (content && content.length) { const html = marked(content); ctx.body = html; } else { return await next(); } } else { return await next(); }}
代码不多实现起来也不复杂,暂时没考虑各浏览器的兼容性问题,相信大家用的都是新版浏览器。
阅读全文
0 0
- Markdown在线预览
- 在线预览
- 在线预览
- 在线预览
- word在线预览,文件在线预览,SWFTools
- 在线markdown
- 在线预览word文档
- 在线预览资料
- 文档在线预览方案
- pdf 文档 在线预览
- 多格式文件在线预览
- 文档在线预览方案
- imgPreview在线预览
- 在线预览office文档
- 文档在线预览
- 在线预览实现
- PDF在线预览下载
- CAD在线预览
- 什么是tensorflow
- Nginx详细安装部署教程(一)
- Hibernate关系映射一对一
- 关于vs2013版试用期结束后如何激活的一些经验总结
- linux常用命令
- Markdown在线预览
- 解决ListView与SwipeRefreshLayout滑动冲突的问题
- 在浏览器中使用百度地图的定位服务获得经纬度
- Java集合框架小结
- xss的payload构造(cookie劫持和get\post请求进行操控浏览器)
- eclipse提交代码连接不上SVN服务器(org.apache.subversion.javahl.ClientException: svn: E175002: connection refuse)
- 這些電競選手緣何如此“囂張”
- lunix下安装opencv过程-爬坑总结
- 从Excel中提取数据