Bolb

Bolb

 

Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。

Blob 表示的不一定是 JavaScript 原生格式的数据。File 接口基于 Blob,继承了 blob 的功能并将其扩展以支持用户系统上的文件。

使用 blob

要从其他非 blob 对象和数据构造一个 Blob,请使用 Blob() 构造函数。要创建一个 blob 数据的子集 blob,请使用 slice() 方法。要获取用户文件系统上的文件对应的 Blob 对象,请参阅 File 文档。

接受 Blob 对象的 API 也被列在 File 文档中。

 base64转换为文件流(Blob)

  datatoBlob(data) {
    const arr = data.split(','),
      mime = arr[0].match(/:(.*?);/)[1],
      bstr = atob(arr[1]);
    let n = bstr.length;
    const u8arr = new Uint8Array(n);
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], { type: mime });
  }

二进制字符串string转为文件流(Blob)

function binaryStringToBlob(binaryString, contentType) {
  const binaryLen = binaryString.length;
  const bytes = new Uint8Array(binaryLen);
  for (let i = 0; i < binaryLen; i++) {
    const ascii = binaryString.charCodeAt(i);
    bytes[i] = ascii;
  }
  return new Blob([bytes], { type: contentType });
}

File 对象是特殊类型的 Blob,上传文件

 // 为本地文件读入流
  var fileData = wps.FileSystem.readAsBinaryString(uploadPath);
  var data = new FormData();
  // 参数file文件流
  data.append("file", binaryStringToBlob(fileData, "application/octet-stream"), uploadName);

一般上传文件过程

// 创建 FormData 对象
var formData = new FormData();

// 获取文件输入框中的文件
var fileInput = document.getElementById('file-input');
var file = fileInput.files[0];

// 添加文件到 FormData
formData.append('file', file);

// 创建 XHR 对象
var xhr = new XMLHttpRequest();

// 设置请求方法和 URL
xhr.open('POST', '/upload-file');

// 监听请求完成事件
xhr.onload = function() {
  if (xhr.status === 200) {
    // 请求成功处理
    console.log('File uploaded successfully.');
  } else {
    // 请求失败处理
    console.log('File upload failed.');
  }
};

// 发送 FormData 数据
xhr.send(formData);

 

codePointAt和charCodeAt的区别

codePointAt()方法返回一个非负整数,该整数是Unicode代码点值。

charCodeAt()方法返回一个介于0和65535之间的整数,表示给定索引处的UTF-16代码单元

在unicode中0000-ffff,可以用charCodeAt, 超出了就不行

在Unicode中超出ffff的 '𠮷'

所谓超出ffff就是要用四个字节表示 因为JS采取的是UTF-16储存 所以一般都是两个字节储存 但是一旦超过ffff后就需要4个字节储存。因为十六进制就变成五位了。

对于这种4个字节的字符,JavaScript 不能正确处理 所以ES6有了codePointAt

'𠮷'.charCodeAt(0) // 55362  
'𠮷'.codePointAt(0) // 134071 

'𠮷'.codePointAt(0).toString(16) // 20bb7

 




posted @ 2019-06-03 15:38  litiyi  阅读(483)  评论(0编辑  收藏  举报