javascript高级知识三
1.文件下载
采用文件流的形式进行下载,后来返回的是文件流。
1 | /** |
1.前端文件下载的权限验证问题 解决前端文件下载时的权限认证问题,一种是基于jwt实现权限验证,一种利用 HTML5 File API 实现权限验证。
2.vue实现文件下载
3.【JS】前端文件下载(无刷新)方法总结 1.利用form.submit直接向后端提交,后端返回文件流;2.利于iframe直接向后端提交,后端返回文件流;3.使用windows.open下载文件;4.解决“无法根据回调函数做交互”的问题:ajax提交,后端返回在线文件地址;5.解决“无法根据回调函数做交互”的问题:jquery-download 插件;6.利用Html5的download属性进行下载;7.利用Html5的Blob对象实现对文件流进行下载;7.新兴方案中的综合方案:file-saver;
4.h5实现下载(二)FileSaver.js 一个生成文件并下载的插件
5.Java文件下载的几种方式
【6】.java将string转为流并下载 通过读取文件,并将字符串转为流进行下载。
2.对象深度合并
使用Object.assign() 进行的对象合并,是一个浅合并,后面的值会覆盖前面的值,比如对象下面还有子对象,那么就会一整个的都覆盖掉,忽略掉子对象。如何做到不忽略子对象进行合并呢?
1 | // 将对象进行深度复制,合并 |
3.文件上传
参考文章2写的比较好,内容比较多,也非常的丰富。主要的问题有下面的几个:
1.js实现文件切片上传,断点续传 读取文件,文件唯一性,文件切割,h5上传一个(一片)文件
2.前端大文件上传 这篇文章的内容比较多,从传统的文件上传,到大文件分割上传,再到断点续传都有设及到,还有上传进度和暂停,也有部分的代码展示。
3.Web Uploader WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+。两套运行时,同样的调用方式,可供用户任意选用。采用大文件分片并发上传,极大的提高了文件上传效率。
4.自定义input[type=”file”]的样式 自定义文件选择按钮的样式,关键是:1.自定义与其中一个浏览器表现类似的样式,将其放在下层;2. 将浏览器本身的表现出来的样式“隐藏掉”, opacity: 0; 置于上层,这样我们点击的才是 input[type=”file”] 响应的事件;
5.纯 js 来实现大文件的分片上传 这个其实挺简单的,就是把文件进行分块,然后进行了上传操作
6.如何在javascript中将formData对象转换为二进制?
7.前端本地文件操作与上传
1.文件内容被读出来了
我在使用的时候,发现了使用FormData进行数据传输的时候,浏览器会把其中的文件内容读出来。也就是显示其中的文件内容。比如我上传一个 .txt 文件,或者是将 .txt 文件的后缀改成 .d 也还是能读出其中的内容。本来我以为会是二进制的数据。
1.FormData和FileReader
2.利用FormData向后端传递二进制流文件 new FormData()就是将文件转成二进制流,它就是binary。向表单中追加属性值用append()方法
3.如何在javascript中将formData对象转换为二进制?
4.前端H5中JS用FileReader对象读取blob对象二进制数据,文件传输 1.通过input[type=”file”]标签获取本地文件File对象。2.通过FileReader的readAsArrayBuffer方法将File对象转换为ArrayBuffer。3.创建xhr对象,配置请求信息。 除此之外,还写一个传输二进制字符串的ajax示例。
2.java文件接收
我大致的研究了java文件接收的情况
(1) 使用@RequestBody
也就是说,通过SpringBoot提供的@RequestBody进行转换,直接获取其中的参数。
(2) 使用request读取
(3) 使用MultipartHttpServletRequest
通过Spring框架提供的MultipartHttpServletRequest 将 request 请求转化为 MultipartHttpServletRequest,然后通过,getParameter获取除文件以为的其他参数。
1 | MultipartHttpServletRequest params=((MultipartHttpServletRequest) request); |
1.大文件分片上传Java版简单实现 这里使用了@RequestBody 进行了文件的接收,然后进行了转换
2.与文件上传到的三个类:FileItem类、ServletFileUpload 类、DiskFileItemFactory类 ServletFileUpload和DiskFileItemFactory是成对出现的,ServletFileUpload负责解析请求,而解析后的对象存放位置(内存还是临时文件形式)是通过,setFileItemFactory属性或者是构造函数来设定
3.multipart/form-data 文件上传表单中 传递参数无法获取的原因!
4.request获取表单数据
5.使用RequestParam或HttpServletRequest获取上传的文件 MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; 将request转换为MultipartHttpServletRequest,可以获取其中的file参数以及其他的参数。
6.使用 Multipart 进行文件上传 这个对于接收文件,保存文件以及获取除文件以为的参数也都有说明
7.SpringMVC的MultipartHttpServletRequest
8.如何用SpringBoot框架来接收multipart/form-data文件 这个对于接收文件,保存文件以及获取除文件以为的参数也都有说明
9.JavaWeb文件上传 这是比较传统的使用DiskFileItemFactory,ServletFileUpload 进行文件的解析和接收
3.解析multipart/form-data
像上面的接收文件的方法,基本上框架都已经做好了数据的解析和封装,但是如果要进行手动分割呢,如何做呢?
4.抓包
1.wireshark抓包新手使用教程 这个讲的挺全的,按照操作就可以了。
5.循环删除对象数组中的值
关于对象数组,主要就是在一个数组中,各个元素都是一个独立的对象,例如:
1 | var objArray=[Object,Object,Object]; |
使用for循环去删除上面的对象数组中的值,首先想到的是:
1 | var c=objArray.length; |
这样运行之后,会发现并不能删除整个数组,为什么呢?实际上,再调用splice的时候,没删除一个元素,数组的长度就会减少一个,那么你固定的数组长度c,到最后数组里面已经没有编号为c的元素了。所以正确的做法:
1 | //清空标注 |
每循环一次,让for重新计算数组长度,每删除一个元素a,a后面的数组元素序号会减一,为了删除a元素后面的第一个元素,将循环遍量先减去一,然后再i++,指针就指向了a元素的后一位元素了。
6.密码强度认证
1 | /** |
7.观察元素变动
1 | // 选择需要观察变动的节点 |
1.js监听页面元素是否变化 这个代码示例写的挺好的。
2.MutationObserver
3.如何监听页面元素增加
4.js判断页面加载完毕方法 主要是onload方法,document.onreadystatechange
5.如何监听页面 DOM 变动并高效响应 从 DOM 变动事件监听说起,再聊聊 JavaScript 中的截流/节流函数,这篇文章对于优化这块做的还是不错的