动态下载文件读取其中文本responseType: ‘blob‘;reader.readAsText(blob, ‘utf-8‘)

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));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值