diff --git a/source/_posts/JavaScript/js对文件和二进制的操作.md b/source/_posts/JavaScript/js对文件和二进制的操作.md new file mode 100644 index 0000000..f79af67 --- /dev/null +++ b/source/_posts/JavaScript/js对文件和二进制的操作.md @@ -0,0 +1,44 @@ +--- +title: js对文件和二进制的操作 +date: 2019-1-30 16:34:53 +tags: + - JavaScript +categories: + - JavaScript +--- + +### FileReader +它是一个文件读取器 +MDN文档里面是这样介绍的 +> 其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以来自拖放操作生成的 DataTransfer对象,还可以是来自在一个HTMLCanvasElement上执行mozGetAsFile()方法后返回结果。 + +#### 来自input元素 +```javascript +const fileInput = document.getElementById("upload-file") +if(!fileInput.value) return + +const reader = new FileReader() +reader.onload = function(e) { + console.log(e.target.result) +} +reader.readAsDataURL(fileInput.files[0]) +``` +使用FileReader对象的`readAsDataURL`方法获取到的是base64编码, 可以用于图片的预览或文件上传 +`readAsText`方法可以获取文本文件的字符 + +如果file类型的input带有`multiple="multiple"`则可以选择多个文件 +fileInput.files就包含多个File对象 +这个files本身是一个`FileList`对象 + +#### 来自Blob对象 +```javascript +const reader = new FileReader() +const blob = new Blob(['Hello World'], { type: 'text/plain'}) +reader.onload = function(e) { + console.log(e.target.result) + // data:text/plain;base64,SGVsbG8gV29ybGQ= +} +reader.readAsDataURL(blob) +``` +File对象的原型是Blob对象, 所以本质上与来自input元素没什么区别 +![File对象](/images/JavaScript/File对象.png) diff --git a/source/images/JavaScript/File对象.png b/source/images/JavaScript/File对象.png new file mode 100644 index 0000000..e78c170 Binary files /dev/null and b/source/images/JavaScript/File对象.png differ