web代码编辑

效果如下:

1、解压

在线解压需要用到 jszip,支持将String / Array of bytes / ArrayBuffer / Uint8Array / Buffer / Blob / Promise文件格式的压缩包解压。
由于接口返回的是文件流,所以使用jszip-utils包将文件流转为ArrayBuffer格式。

npm install jszip -S
npm install jszip-utils -S
import JSZipUtils from "jszip-utils";
import JSZip from "jszip";export default {data(){return {zip: null,}},methods:{loadZip() {JSZipUtils.getBinaryContent("压缩文件地址", function (err, data) {if(err) {throw err; // or handle the error}this.zip = new JSZip();//解压this.zip.loadAsync(data).then((res) => {       console.log(res);});});},}
}

打印出来是这样的:

2、生成目录

目录用的是element-ui的树形控件,加载方式懒加载,这样就不用递归生成所有目录。

<el-treeref="tree"lazyhighlight-current:data="fileMenu":props="defaultProps":load="loadNode"@node-click="handleNodeClick"
><!-- 文件夹图标 --><span class="custom-tree-node" slot-scope="{ node, data }"><em v-if="!data.leaf" class="el-icon-folder-opened"></em><span>{{ node.label }}</span></span>
</el-tree>
data(){return {fileMenu: [],defaultProps: {children: "children",label: "label",isLeaf: "leaf",},}
},
methods:{getMenuList(zip) {const menu = [];// 循环当前文件夹目录zip.forEach((relativePath, file) => {const dir = relativePath.split("/");// 文件if (dir.length === 1) {menu.push({label: dir[0],leaf: true,path: file.name,});}// 文件夹if (dir.length === 2 && file.dir) {menu.push({label: dir[0],leaf: false,path: file.name,});}});return menu;},// 加载子目录loadNode(node, resolve) {if (node.level === 0) return;// 把点击的文件夹路径传入const child = this.getMenuList(this.zip.folder(node.data.path));resolve(child);},
}

3、代码编辑

在线代码编辑需要用到 monaco-editor,建议下载0.30.0版本。如果需要代码高亮、快捷键、语法提示等功能可以安装monaco-editor-webpack-plugin插件帮忙导入。

npm install monaco-editor@0.30.0 -S
npm install monaco-editor-webpack-plugin@6.0.0 -S
<template><div id="monaco"></div>
</template><script>
import * as monaco from "monaco-editor";
export default {data(){return {monacoInstance: null,}},mounted(){this.monacoInstance = monaco.editor.create(document.getElementById("monaco"),{value: `//请选择文件进行编辑`,language: "js",});// 编辑监听this.monacoInstance.onDidChangeModelContent(() => {this.saveValue();});},methods:{// 在树节点加上点击事件handleNodeClick(data) {if (data.leaf) {this.currentPath = data.path;// 将点击的文件内容显示在编译框内this.zip.file(data.path).async("string").then((res) => {this.monacoInstance.setValue(res);});}},// 保存编辑saveValue() {if (this.currentPath) {const newValue = this.monacoInstance.getValue();this.zip.file(this.currentPath, newValue);}},// 打包pack(){this.zip.generateAsync({type:"blob"}).then(function (content) {// 保存或上传操作// saveAs(content, "hello.zip");});}}
}
</script>

vue 在线解压压缩包并在线编辑代码保存相关推荐

  1. 如何使用Google Colab 在线解压GoogleDrive里的RAR ZIP等压缩包

    如何使用Google Colab 在线解压GoogleDrive里的RAR ZIP等压缩包 太久没更新了,今天来写一篇. 前段时间群里有人问如何在线解压 GoogleDrive 里的压缩包,我因为太忙 ...

  2. 在线解压-密码压缩包

    在线解压-密码压缩包 猫密网 选择要解压的又密码的压缩包, 填入电话或邮箱 就会把解压好的文件发送给你啦!!

  3. 关于Centos中在线解压文件名中有中文字符出现乱码的终极解决方法 unar 我的压缩文件.zip

    本帖最后由 hsxnet 于 2018-2-4 16:14 编辑 关于Centos中在线解压文件名中有中文字符出现乱码的终极解决方法(亲测总结): 记录一下我测试的笨办法,以备自己日后查询: 一.从C ...

  4. 在线解压rar_解压指南!新手必看

    看后台留言还有小可爱不知道如何解压zip格式,今天出一篇指南 PS:无论你是不是百度网盘会员,都不要在线解压zip 因为这种类型的文包太容易被河蟹了!所以,拜托大家下载解压!  苹果IOS系统  1. ...

  5. 【Web技术】959- JavaScript 如何在线解压 ZIP 文件?

    相信大家对 ZIP 文件都不会陌生,当你要打开本地的 ZIP 文件时,你就需要先安装支持解压 ZIP 文件的解压软件.但如果预解压的 ZIP 文件在服务器上,我们应该如何处理呢? 最简单的一种方案就是 ...

  6. php tp5在线解压压缩文件

    php tp5在线解压压缩文件 没啥原理,直接上代码把 解压方法 /*** 解压zip文件到指定目录* @param {string} $filepath: 文件路径* @param {string} ...

  7. 服务器空间在线解压程序及使用教程

    <一>PHP脚本集之压缩解压程序:unzipfiles 1.作者不详,姑且叫它"unzipfiles"吧.这个脚本只有两个文件,zipfile.php和unzipfil ...

  8. 最近很火的在线文件预览txt、doc、ppt、pdf、excel、jpg、png、zip、tar.gz等各种文件及压缩文件在线解压和预览,包括前后端设计和源码,编写搜索引擎多关键词检索名称和内容(四)

    最近很火的在线文件预览txt.doc.ppt.pdf.excel.jpg.mp4.png.zip.tar.gz等各种文件及压缩文件在线解压和预览,包括前后端设计和源码,编写一个文件搜索引擎实现多关键词 ...

  9. 宝塔服务器网页 怎么压缩文件,宝塔Linux面板在线解压WAR压缩文件

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段.编程之家小编现在分享给大家,也给大家做个参考. 这个版本的迭达更新,本来是没什么好说的,额,什么叫迭代?简单说就是重复反馈活动的过程,这重复 ...

最新文章

  1. 官方抓虫,PyTorch 新版本修复 13 项 Bug
  2. JS打字效果的动态菜单代码分享
  3. slowfast解读:用于计算机视觉视频理解的双模CNN
  4. context switch的切换过程(TTBR0的切换/ASID的介绍)
  5. Spring 3.1缓存和配置
  6. Python字符串与列表间的相互转化
  7. NET Micro FrameworkのTimerクラス攻略
  8. 洛谷3004 [USACO10DEC]宝箱Treasure Chest
  9. 万字干货:阿里巴巴是怎么做大数据算法应用测试的? | 凌云时刻
  10. Handler.sendMessage 与 Handler.obtainMessage.sendToTarget比较
  11. 2014年9月16日----暴风影音笔试题
  12. 数字证书相关的知识点
  13. Flask的jinjia2语句最详细容易理解教程
  14. 一个数据存取类的代码,请高手帮忙分析和指定是否有误!
  15. 第一类和第二类曲面积分的转换
  16. SAGAN——Self-Attention Generative Adversarial Networks
  17. uni-app 超好用的时间选择器组件(起止时间)
  18. 【JZOJ5353】【NOIP2017提高A组模拟9.9】村通网【最小生成树】
  19. 英国电信进军中国市场,难对三大运营商造成太大影响
  20. 机器人动力学简述 Robot Dynamics

热门文章

  1. 豆豆趣事[2015年10月]
  2. [CTO札记]架构改造(SOBS)4原则
  3. iOS之适配苹果Universal Links 和升级友盟的QQ和微信分享艰难之路
  4. PHP函数(function)
  5. 分享 西安的炒房内幕
  6. 打卡小程序源码,签到小程序,微擎后端,内附安装教程
  7. 2. Java中的垃圾收集 - GC参考手册
  8. Linux系统站群VPS增加多IP绑定的详细教程、VPS额外增加IP手动绑定
  9. Dubbo是什么?能做什么?如何使用?
  10. 遇见她,我才明白“灵魂伴侣”的真正含义