import axios from 'axios';
/**
* 下载并读取文本文件内容
* @param {string} fileUrl 文件URL
* @returns {Promise<string>} 文件文本内容
*/
async function downloadAndReadText(fileUrl) {
try {
// 1. 发起请求,设置响应类型为 blob
const response = await axios.get(fileUrl, {
responseType: 'blob', // 关键:确保返回Blob对象[1,6](@ref)
});
// 2. 判断响应是否为JSON错误(后端可能返回错误信息)
if (response.data.type === 'application/json') {
const errorText = await readBlobAsText(response.data);
const errorData = JSON.parse(errorText);
throw new Error(errorData.message || '下载失败');
}
// 3. 读取Blob为文本
const fileText = await readBlobAsText(response.data);
return fileText;
} catch (error) {
console.error('文件下载或读取失败:', error);
throw error; // 向上抛出错误
}
}
/**
* 将Blob对象转换为文本
* @param {Blob} blob
* @returns {Promise<string>}
*/
function readBlobAsText(blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result.toString());
reader.onerror = () => reject(new Error('Blob读取失败'));
reader.readAsText(blob, 'utf-8'); // 指定编码为UTF-8[1,4](@ref)
});
}
// 示例调用
downloadAndReadText('https://example.com/data.txt')
.then(text => console.log('文件内容:', text))
.catch(err => console.error('错误:', err.message));
动态下载文件读取其中文本responseType: ‘blob‘;reader.readAsText(blob, ‘utf-8‘)
于 2025-07-08 08:51:08 首次发布