IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> buffer和图片的预览上传和base64的转码和解码 -> 正文阅读

[JavaScript知识库]buffer和图片的预览上传和base64的转码和解码

1.ArrayBuffer

ArrayBuffer用来表示通用的固定长度的原始二进制数据缓冲区
他是一个字节数组,在别的语音称为byteArray
不可以直接使用,要转化为TypedArray或Dataview对象来操作
通过这些格式来读取内容

2.TypedArray

一个类型化数组(TypedArray)对象描述了一个底层的二进制数据缓冲区
(binary data buffer)的一个类数组视图(view)
它本身不可以被实例化,甚至无法访问,可以理解为接口

3.DataView

DataView 视图是一个可以从 二进制ArrayBuffer
对象中读写多种数值类型的底层接口,
使用它时,不用考虑不同平台的字节序问题。

4.Blob

  1. bolb对象表示一个不可变、原始数据的类文件对象。
  2. 它的数据可以按文本或二进制的格式进行读取,
  3. 也可以转换成 ReadableStream 来用于数据操作。
  4. 一种从Blob中读取内容的方法是使用 FileReader
  5. file对象 和blob对象,File 接口基于Blob,
  6. file继承了 blob 的功能并将其扩展使其支持用户系统上的文件。
var debug = { hello: "world" };
var blob = new Blob([JSON.stringify(debug, null, 2)],
            { type: 'application/json' });

5.file对象

File 对象是来自用户在一个 <input> 元素上选择文件后返回的 

FileList 对象,也可以是来自由拖放操作生成的 DataTransfer

对象或者来自 HTMLCanvasElement 上的 mozGetAsFile() API。

6. FileReader

文件预览
function previewFile() {
  var preview = document.querySelector('img');
  var file =  document.querySelector
  			('input[type=file]').files[0];
  var reader = new FileReader();

  reader.addEventListener("load", function () {
    preview.src = reader.result;
  }, false);

  if (file) {
    reader.readAsDataURL(file);
  }
}


 reader.readAsDataURL()
 data:URL格式的Base64字符串以表示所读取文件的内容。
 *注意***不可用于文件上传,应为太大了
 应该把base64转码

 reader.readAsText()
 字符串的文件内容。默认utf-8
```kk

# 7.URL.createObjectURL

```powershell
objectURL = URL.createObjectURL(object);

这个新的URL 对象表示指定的 File 对象或 Blob 对象
你可以像使用普通URL那样使用它,比如用在img.src 上。

URL.revokeObjectURL(objectURL)
让浏览器知道不再保留对文件的引用

不可用于文件上传,应为他只是一个文件的引用

8. base64的转码和解码

完整的代码案例

前端代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <input type="file" id="input" οnchange="handleFiles(this.files)">
  <script>
    const inputElement = document.getElementById("input");
    inputElement.addEventListener("change", handleFiles, false);
    function handleFiles() {
      const fileList = this.files;
       /* now you can work with the file list */
      //new 一个文件阅读对象
      var reader = new FileReader();
      //监听转化成功的回调函数,监听load后的函数
      reader.addEventListener("load", function () {
        //得到字节数组
        let bytes = atob(reader.result.split(',')[1]);
        //获取文件类型
        let mime = reader.result.split(',')[0].match(/:(.*?);/)[1]
        //创建一个长度为n的buffer
        let arrayBuffer = new ArrayBuffer(bytes.length);
        //转化为8个字节的类型数组,描述了一个底层的二进制数据缓冲区
        let uInt8Array = new Uint8Array(arrayBuffer);
        for (let i = 0; i < bytes.length; i++) {
          //填充转化后的阿斯克码
          uInt8Array[i] = bytes.charCodeAt(i);
        }
        //生成一个bolb类型
        let blob = new Blob([uInt8Array], { type: mime })
        let xhr = new XMLHttpRequest;
        //以表单的形式向后端传递
        let formData = new FormData();
        //, blob值
        formData.append('avatar', blob);
        xhr.open('post', 'http://localhost:8080/upload', true);
        xhr.send(formData);
      }, false);
	
	
      if (fileList[0]) {
        //读取,上传的文件为 转化为base64
        //在这里转化成功,会监听load事假
        reader.readAsDataURL(fileList[0]);
      }
    }

  </script>
</body>

</html>
服务端代码
let express = require('express');
let path = require('path');
let cors = require('cors');
let app = express();
app.use(cors())
app.use(express.static(path.join(__dirname, 'public')))
const multer = require('multer');
//uploads文件存放的地址,没有会报错
//山川的图片会自动保存再这个文件夹
app.use(multer({ dest: './uploads' }).single('avatar'))
app.post('/upload', function (req, res) {
  console.log(req.file, req.body)
  res.json({ sucess: true })
})
app.listen(8080, () => {
  console.log('成功')
})
//将base64转换为文件 直接newFile
 function dataURLtoFile(dataurl, filename) 
    {
        var arr = dataurl.split(','),
            mime = arr[0].match(/:(.*?);/)[1],
            bstr = atob(arr[1]), 
            n = bstr.length, 
            u8arr = new Uint8Array(n);
        while(n--){
            u8arr[n] = bstr.charCodeAt(n);
        }
        return new File([u8arr], filename, {type:mime});
    }
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:16:14  更:2022-04-01 23:19:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:58:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码