|
|
|
|
@ -0,0 +1,147 @@
|
|
|
|
|
## 怎么在控制台查看blob格式的内容
|
|
|
|
|
|
|
|
|
|
在浏览器控制台中查看 `Blob` 格式的内容,需要特别注意:**`Blob` 是二进制数据,不能像字符串一样直接打印**。如果你直接 `console.log(blob)`,控制台通常只会显示 `Blob { size: xxx, type: "..." }`,而不会显示内部的原始字节或可读内容。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## ✅ 正确方法:将 `Blob` 转成可读格式后查看
|
|
|
|
|
|
|
|
|
|
以下是 **在浏览器控制台中查看 Blob 内容的 5 种实用方式**,按推荐顺序排列:
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### ✅ 方法 1:用 `FileReader` 读取为文本(适用于文本类 Blob,如 `.txt`, `.json`, `.html`)
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
// 假设你有一个 Blob 对象
|
|
|
|
|
const blob = new Blob(['Hello World'], { type: 'text/plain' });
|
|
|
|
|
|
|
|
|
|
// 使用 FileReader 读取为文本
|
|
|
|
|
const reader = new FileReader();
|
|
|
|
|
reader.onload = function (e) {
|
|
|
|
|
console.log('Blob 内容(文本):', e.target.result);
|
|
|
|
|
};
|
|
|
|
|
reader.readAsText(blob); // ✅ 重点:readAsText
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ✅ 适合:`.txt`, `.json`, `.html`, `.xml` 等文本格式。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### ✅ 方法 2:读取为 Base64 字符串(查看原始编码)
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const reader = new FileReader();
|
|
|
|
|
reader.onload = function (e) {
|
|
|
|
|
console.log('Blob 的 Base64 编码:', e.target.result);
|
|
|
|
|
};
|
|
|
|
|
reader.readAsDataURL(blob); // ✅ 读取为 data URL,包含 base64
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ✅ 输出示例:
|
|
|
|
|
> ```
|
|
|
|
|
> data:text/plain;base64,SGVsbG8gV29ybGQ=
|
|
|
|
|
> ```
|
|
|
|
|
>
|
|
|
|
|
> - `data:` 协议 + `base64` 编码;
|
|
|
|
|
> - 可以复制粘贴到浏览器或工具中解码查看。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### ✅ 方法 3:读取为 ArrayBuffer(查看原始字节流)
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const reader = new FileReader();
|
|
|
|
|
reader.onload = function (e) {
|
|
|
|
|
const arrayBuffer = e.target.result;
|
|
|
|
|
const uint8Array = new Uint8Array(arrayBuffer);
|
|
|
|
|
console.log('原始字节流(Uint8Array):', uint8Array);
|
|
|
|
|
console.log('字节数组(前 20 个字节):', uint8Array.slice(0, 20));
|
|
|
|
|
};
|
|
|
|
|
reader.readAsArrayBuffer(blob); // ✅ 读取为 ArrayBuffer
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ✅ 输出示例:
|
|
|
|
|
> ```
|
|
|
|
|
> Uint8Array(11) [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
|
|
|
|
|
> ```
|
|
|
|
|
>
|
|
|
|
|
> - 每个数字是字节值(ASCII 码);
|
|
|
|
|
> - 适合查看 PDF、Excel、图片等二进制文件的头部签名。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
### ✅ 方法 4:查看 Blob 的 `type` 和 `size`(基本信息)
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
console.log('Blob 类型:', blob.type); // 如: 'application/pdf'
|
|
|
|
|
console.log('Blob 大小:', blob.size, '字节'); // 如: 12345
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ✅ 快速判断文件类型和大小。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### ✅ 方法 5:用 `console.table()` 显示字节数组(更清晰)
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const reader = new FileReader();
|
|
|
|
|
reader.onload = function (e) {
|
|
|
|
|
const uint8Array = new Uint8Array(e.target.result);
|
|
|
|
|
const table = Array.from(uint8Array).map((byte, index) => ({
|
|
|
|
|
index,
|
|
|
|
|
byte,
|
|
|
|
|
hex: byte.toString(16).padStart(2, '0'),
|
|
|
|
|
char: String.fromCharCode(byte)
|
|
|
|
|
}));
|
|
|
|
|
console.table(table.slice(0, 20)); // 显示前 20 个字节
|
|
|
|
|
};
|
|
|
|
|
reader.readAsArrayBuffer(blob);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ✅ 输出表格,清晰展示:
|
|
|
|
|
> - 字节索引、值、十六进制、ASCII 字符。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 🔍 如何判断 Blob 是什么文件?
|
|
|
|
|
|
|
|
|
|
通过 `blob.type` 和 `arrayBuffer` 的前几个字节判断:
|
|
|
|
|
|
|
|
|
|
| 文件类型 | `blob.type` | 前 4 字节(Hex) | 说明 |
|
|
|
|
|
|----------|-------------|------------------|------|
|
|
|
|
|
| PDF | `application/pdf` | `25 50 44 46` | `%PDF` |
|
|
|
|
|
| Excel `.xlsx` | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` | `50 4B 03 04` | `PK`(ZIP 格式) |
|
|
|
|
|
| Word `.docx` | `application/vnd.openxmlformats-officedocument.wordprocessingml.document` | `50 4B 03 04` | 同上 |
|
|
|
|
|
| PNG 图片 | `image/png` | `89 50 4E 47` | `‰PNG` |
|
|
|
|
|
| JPEG 图片 | `image/jpeg` | `FF D8 FF E0` | `ÿØÿà` |
|
|
|
|
|
|
|
|
|
|
> ✅ 用 `new Uint8Array(arrayBuffer).slice(0, 4)` 查看前 4 字节即可快速识别。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
## ✅ 常见错误写法(不要这样做)
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
console.log(blob); // ❌ 只显示 Blob 对象,看不到内容
|
|
|
|
|
console.log(blob.toString()); // ❌ 返回 [object Blob],无意义
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ⚠️ 这些写法无法获取实际内容!
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## ✅ 总结:查看 Blob 内容的正确流程
|
|
|
|
|
|
|
|
|
|
| 目标 | 推荐方法 |
|
|
|
|
|
|------|----------|
|
|
|
|
|
| 查看文本内容(JSON、TXT) | `readAsText(blob)` |
|
|
|
|
|
| 查看原始编码(Base64) | `readAsDataURL(blob)` |
|
|
|
|
|
| 查看原始字节流 | `readAsArrayBuffer(blob)` + `Uint8Array` |
|
|
|
|
|
| 快速判断文件类型 | `blob.type` + 前 4 字节 |
|
|
|
|
|
| 清晰查看字节结构 | `console.table` + `Uint8Array` |
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### ✅ 一句话总结:
|
|
|
|
|
|
|
|
|
|
> 🔍 **不能直接 `console.log(blob)` 查看内容**,必须使用 `FileReader` 读取为 `Text`、`DataURL` 或 `ArrayBuffer`,再转换为可读格式。
|
|
|
|
|
> ✅ 最推荐:用 `readAsArrayBuffer` + `Uint8Array` 查看原始字节,结合 `console.table` 更清晰。
|