Angular 学习笔记 work with zip (压缩文件格式)
最近在做批量创建.
上回说到了 读写 excel, 那么就可以通过 excel 的资料来创建资料了。但是资料经常会有图片,而 excel 里面放图片有点不太好.
于是就想 upload excel 的同时在附带另一个 folder 里面装图片, excel 就写对应的图片名字就好了.
那一个 table 可能有好几个 column 都是图片, 如果把图片一股脑丢 input file 体验不太好. 所以最好是分几个 folder 装图片对应 column
然后 zip 起来丢 input file. 虽然 input file 是可以支持丢 folder 的, 但是 safari 好像是不支持的.
所以还是用 zip 比较妥当. windows 10 都自带 zip 对用户来说不算太难.
那么来说说 js 如果读写 zip file.
nodejs 发展多年,你说没有 plug in 做这个事没有人会相信. 所以随便找一下就有了.
有 .d.ts 所以对 ng 很友好.
跟着做就可以了
https://stuk.github.io/jszip/documentation/examples/read-local-file-api.html
太简单这里就不叙述了.
上面只是读,写的部分目前没有需求所以我也没有测试. 以后要才看呗
记入一下基础的东西.
ArrayBuffer, Blob 我经常搞混. 可以看这篇
https://www.gobeta.net/books/ruanyf-javascript-tutorial/bom/arraybuffer/
ArrayBuffer 有点像 c# 的 memory stream
blob 像 file stream
平时 input file 的 File 对象,是 blob 的一个衍生来的.
所以通常我们会用到的是 blob
大概懂就好啦. 够用
记入一下测试的代码
import * as JSZip from 'jszip'; const input = document.getElementById('input') as HTMLInputElement;
input.addEventListener('input', async e => {
const file = Array.from(input.files)[0];
// const arrayBuffer = await raedFileAsync(file);
const zip = await JSZip.loadAsync(file);
console.log(zip);
type PathAndZipEntry = {
relativePath: string;
file: JSZip.JSZipObject;
}
const pathAndZipEntries: PathAndZipEntry[] = [];
zip.forEach((relativePath, file) => {
pathAndZipEntries.push({ relativePath, file });
});
const ajaxAsync = async (blob: Blob, fileName: string): Promise<any> => {
return new Promise(resolve => {
const formData = new FormData();
formData.append('file', blob, fileName);
const xhr = new XMLHttpRequest();
xhr.open('POST', 'http://192.168.1.152:61547/api/uploadFile');
xhr.onload = () => {
resolve(xhr.response);
}
xhr.send(formData);
});
} for await (const { relativePath, file } of pathAndZipEntries) {
console.log('relativePath', relativePath);
const paths = relativePath.split('/');
const blob = await file.async('blob');
console.log(await ajaxAsync(blob, paths[paths.length - 1]));
} input.value = '';
});
Angular 学习笔记 work with zip (压缩文件格式)的更多相关文章
- angular学习笔记(三十一)-$location(2)
之前已经介绍了$location服务的基本用法:angular学习笔记(三十一)-$location(1). 这篇是上一篇的进阶,介绍$location的配置,兼容各版本浏览器,等. *注意,这里介绍 ...
- angular学习笔记(三十一)-$location(1)
本篇介绍angular中的$location服务的基本用法,下一篇介绍它的复杂的用法. $location服务的主要作用是用于获取当前url以及改变当前的url,并且存入历史记录. 一. 获取url的 ...
- angular学习笔记(三十)-指令(10)-require和controller
本篇介绍指令的最后两个属性,require和controller 当一个指令需要和父元素指令进行通信的时候,它们就会用到这两个属性,什么意思还是要看栗子: html: <outer‐direct ...
- angular学习笔记(三十)-指令(7)-compile和link(2)
继续上一篇:angular学习笔记(三十)-指令(7)-compile和link(1) 上一篇讲了compile函数的基本概念,接下来详细讲解compile和link的执行顺序. 看一段三个指令嵌套的 ...
- angular学习笔记(三十)-指令(7)-compile和link(1)
这篇主要讲解指令中的compile,以及它和link的微妙的关系. link函数在之前已经讲过了,而compile函数,它和link函数是不能共存的,如果定义了compile属性又定义link属性,那 ...
- angular学习笔记(三十)-指令(6)-transclude()方法(又称linker()方法)-模拟ng-repeat指令
在angular学习笔记(三十)-指令(4)-transclude文章的末尾提到了,如果在指令中需要反复使用被嵌套的那一坨,需要使用transclude()方法. 在angular学习笔记(三十)-指 ...
- angular学习笔记(三十)-指令(5)-link
这篇主要介绍angular指令中的link属性: link:function(scope,iEle,iAttrs,ctrl,linker){ .... } link属性值为一个函数,这个函数有五个参数 ...
- angular学习笔记(三十)-指令(2)-restrice,replace,template
本篇主要讲解指令中的 restrict属性, replace属性, template属性 这三个属性 一. restrict: 字符串.定义指令在视图中的使用方式,一共有四种使用方式: 1. 元素: ...
- angular学习笔记(三十)-指令(1)-概述
之前在 angular学习笔记(十九)-指令修改dom 里面已经简单的提到了angular中的指令,现在来详细的介绍 '指令' 一.指令的创建: dirAppModule.directive('dir ...
- angular 学习笔记
每天进步一点点,学习笔记 笔记来自 angular权威指南 如果想要屏蔽浏览器对表单的默认验证行为,可以在表单元素上添加 novalidate 标记. 而按钮标签则完全忽略 hr e f 属性,并不 ...
随机推荐
- django信号中的条件判断不符合时如何提示错误并返回
在Django中,如果你在信号(Signal)处理函数中需要进行条件判断,如果条件不符合,你可以触发一个异常,并在视图或其他地方捕获这个异常,然后返回相应的错误提示. 以下是一个简单的例子,演示如何在 ...
- vb.net 实现excel导入的时候滚动显示导入的数据
如果你想在 Excel 导入过程中滚动显示导入的数据,可以使用逐行读取 Excel 数据并在滚动窗口中显示. 在 VB.NET 中,你可以使用 Excel.Range 对象逐行读取 Excel 数据, ...
- oeasy教您玩转vim - 15 - # 行内查找
行头行尾 回忆上节课内容 上次学了直接跳到开头和结尾 最重要的就是 ^.$ ^ 到开头 $ 到结尾 I 相当于^i A 相当于$a 查找帮助 还有什么呢? 还是继续在 motion 里面 ^ .$ 之 ...
- 【JavaScript高级03】执行上下文和执行上下文栈
1,函数提升和变量提升 编写以下代码: var a = 3 function fn () { console.log(a) var a = 4 } fn() 上面的JavaScript代码执行结果为一 ...
- 不止于面向对象的SOLID原则
SOLID原则是由人称"鲍勃大叔"的Rober C. Martin所提出来的.他用五个面向对象设计原则的首字母组成了SOLID,并使其得到了广泛传播.这五个原则罗列如下: 单一指责 ...
- [香橙派开发系列]3b系统安装和使用vscode进行远程连接
目录 前言 一.下载镜像和安装系统 二.使用串口助手进行调试 三.查看系统的ip地址 四.使用vscode连接香橙派 最后 前言 之前研究中断的时候一直出现问题,我怀疑是因为zero 3不支持,所以一 ...
- 【Java / JavaScript】AES加密解密
Java封装的AES加密解密工具类: 几个重要的参数信息 - 需要指定一个密钥串sKey 密钥内容自定义 数字 + 字母 + 特殊符号 - 加密方式为 AES - AES下面的模式ECB - ECB下 ...
- 【Hbase】1.3.1版本安装
环境: 1核4G内存128G磁盘,三台机器同一个配置 192.168.242.131 192.168.242.132 192.168.242.133 -- Linux Centos7 x64 系统平台 ...
- 【RabbitMQ】12 日志监控 & 消息追踪
一.日志和监控 RabbitMQ日志存放目录 [root@localhost ~]# ll /var/log/rabbitmq/ 总用量 176 -rw-r-----. 1 rabbitmq rabb ...
- 【Hibernate】Re07 关系映射处理
一.单向多对一关系映射处理 演示案例列举了员工与部门的关系,一个部门下具有多个员工,相反的一个员工只隶属于一个部门下面 Maven依赖坐标: <dependency> <groupI ...