领导提出一个问题,能不能不借助端的能力,实现本地分段读取数据分段显示。在没有特别大的性能要求或者明确提出要求的情况下一般是一次性加载所有的数据并渲染,但是如果数据量大或者手机性能不好的话就会有别的问题了。
听到这个的时候我是懵逼的,我啥也不知道,但是我同事实现了,写了一个简单的demo
假设只上传一个文件
console.log('[FileList 对象]:',event.target.files[0])
const fileDate = event.target.files[0]
let text = await fileDate.slice(1, 10).text()
console.log('[截取一段Blob对象]', fileDate.slice(1, 10));
console.log('[Blob对象转化为文本]', text);
具体实现我还么有写,思路到这里,日后补上
我记得很早之前写过不借助端的力量实现本地上传预览图片音频文件,那个时候就有提到过用过Blob对象,FileReader对象,还有createObjectURL,但是这一次恰好可以把这些都整合起来,一起说一下
var aBlob = new Blob( array, options );
参数,array 是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array ,或者其他类似对象的混合体,它将会被放进 Blob。DOMStrings会被编码为UTF-8。options不介绍了
Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。
=> 这样说的话就是一段我们认识文本可以通过new Blob可以转化为Blob对象
那就要看哪些对象可以用他做搞一些事情
URL.createObjectURL() 她的参数就是Blob对象,用来创建一个url;可以结合a元素的download属性,实现一段日志或者文本的下载
<buttom onclick="onCopyHandle()">复制文本 </buttom>
function onCopyHandle() { // 创建隐藏的可***链接
let content = `
name: sunseekers
role: student
houseName: shanghai
url: https://github.com/sunseekers
userAgent: ${navigator.userAgent}
log:'这里是日志内容'
`.trim();
let filename = 'logFiles.md'
const eleLink = document.createElement('a');
eleLink.download = filename;
eleLink.style.display = 'none';
const blob = new Blob([content]);
eleLink.href = URL.createObjectURL(blob); // 字符内容转变成blob地址
document.body.appendChild(eleLink);
eleLink.click(); // 触发点击
document.body.removeChild(eleLink); // 然后移除
Message.success('日志下载成功')
};
图片可以用img标签显示也可以用canvas画,看需求
<body>
<div class="index">
<input type="file" value="上传文件">
<img width="100" height="100"></img>
</div>
</body>
<script>
let inputEle = document.querySelector("input")
let img = document.querySelector("img")
inputEle.addEventListener('change', async function (event) {
const fileDate = event.target.files[0]
const fileReader = new FileReader()
fileReader.readAsDataURL(fileDate)
fileReader.onload = e => {
img.src = e.target.result
}
})
</script>
原来这些在之前的文章里面都有用过只是我没有想起来,或者被遗忘了,这又是一篇重复率很高的文章。当你对一个对象及他周边的属性属性的时候就可以做很多事了。完了做一次总结和回顾感觉很不一样,原来很多东西都是可以重复利用的,或者说在某一个基础之上做了扩展和升华,又能过做很多很有意义的事情了。与我而言又一次更加清晰的意识到这里前端与本地数据,流有关的知识点