一、 如何获取 blob里面的值
要从Blob对象
中获取其内容,你需要根据Blob的内容类型
采取不同的策略。下面是一些常见的情况和对应的处理方法
1.1 、JSON 数据
如果Blob包含的是JSON格式
的数据,你可以使用TextDecoder
来读取它,并将其解析为JSON
const blob = new Blob([], { type: 'application/json' });
const reader = new FileReader();
reader.onloadend = function() {
const jsonContent = this.result;
try {
const jsonData = JSON.parse(jsonContent);
console.log(jsonData);
} catch (error) {
console.error('Error parsing JSON', error);
}
};
reader.readAsText(blob);
1.2、 文本数据
如果Blob包含的是普通的文本数据
,同样可以使用FileReader的readAsText
方法。
const blob = new Blob([], { type: 'text/plain' });
const reader = new FileReader();
reader.onloadend = function() {
const textContent = this.result;
console.log(textContent);
};
reader.readAsText(blob);
1.3、图像数据
如果Blob包含的是图像数据
,你可以使用URL.createObjectURL
来创建一个临时的URL,然后在<img>标签中显示这个URL
。
const blob = new Blob([], { type: 'image/jpeg' });
const imageUrl = URL.createObjectURL(blob);
const imgElement = document.createElement('img');
imgElement.src = imageUrl;
document.body.appendChild(imgElement);
1.4 、 其他二进制数据
对于其他类型的二进制数据,可以使用readAsArrayBuffer
方法来读取。
const blob = new Blob([], { type: 'application/octet-stream' });
const reader = new FileReader();
reader.onloadend = function() {
const arrayBuffer = this.result;
};
reader.readAsArrayBuffer(blob);
1.5、示例
假设你有一个fetch请求返回了一个Blob对象,你可以这样处理:
fetch('/your-endpoint')
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.blob();
})
.then(blob => {
if (blob.type.startsWith('application/json')) {
const reader = new FileReader();
reader.onloadend = () => {
const jsonContent = reader.result;
const jsonData = JSON.parse(jsonContent);
console.log(jsonData);
};
reader.readAsText(blob);
} else if (blob.type.startsWith('image/')) {
const imageUrl = URL.createObjectURL(blob);
const imgElement = document.createElement('img');
imgElement.src = imageUrl;
document.body.appendChild(imgElement);
} else if (blob.type === 'text/plain') {
const reader = new FileReader();
reader.onloadend = () => {
const textContent = reader.result;
console.log(textContent);
};
reader.readAsText(blob);
} else {
const reader = new FileReader();
reader.onloadend = () => {
const arrayBuffer = reader.result;
console.log(new Uint8Array(arrayBuffer));
};
reader.readAsArrayBuffer(blob);
}
})
.catch(error => console.error('There has been a problem with your fetch operation:', error));
请注意,在处理完Blob之后,记得释放创建的临时URL以避免内存泄漏
:
URL.revokeObjectURL(imageUrl);