You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React JS中如何从GitHub仓库拉取多个文件夹下的原始md文件

实现方案

方案1:已知文件夹/文件命名规则(适配你给出的示例结构)

如果你的仓库md文件路径符合folder{N}/text{N}.md的固定规律,可以直接批量构造请求地址,用Promise.all并发拉取所有内容:

// 配置基础参数,替换为你自己的仓库信息
const GITHUB_CONFIG = {
  owner: 'user-name',
  repo: 'repo-name',
  branch: 'master',
  // 你需要拉取的文件数量,按实际情况调整
  fileCount: 3
}

let fetchAllMdFiles = async () => {
  // 批量构造所有md文件的请求
  const requestList = Array.from({length: GITHUB_CONFIG.fileCount}, (_, i) => {
    const index = i + 1
    return axios.get(`https://raw.githubusercontent.com/${GITHUB_CONFIG.owner}/${GITHUB_CONFIG.repo}/${GITHUB_CONFIG.branch}/folder${index}/text${index}.md`)
  })
  try {
    // 并发请求所有文件
    const responses = await Promise.all(requestList)
    // 所有md文件内容按顺序保存在数组里,可直接用于后续表格渲染
    const mdContents = responses.map(res => res.data)
    console.log('所有md文件内容:', mdContents)
    return mdContents
  } catch (error) {
    console.error('拉取文件失败:', error)
  }
}

方案2:文件夹/文件名不固定,动态遍历仓库所有md文件

如果路径规则不固定,可以先调用GitHub官方的仓库树接口拉取全量文件列表,过滤出所有.md文件后再批量拉取内容:

const GITHUB_CONFIG = {
  owner: 'user-name',
  repo: 'repo-name',
  branch: 'master',
  // 如果请求频次高可以填GitHub个人访问token,避免速率限制,非必填
  // token: 'your-github-token'
}

let fetchAllMdFiles = async () => {
  try {
    // 1. 递归拉取仓库全量文件列表
    const treeRes = await axios.get(`https://api.github.com/repos/${GITHUB_CONFIG.owner}/${GITHUB_CONFIG.repo}/git/trees/${GITHUB_CONFIG.branch}?recursive=1`, {
      // 有token就加,没有可以删掉headers配置
      headers: GITHUB_CONFIG.token ? {Authorization: `token ${GITHUB_CONFIG.token}`} : {}
    })
    // 2. 过滤出所有后缀为.md的文件
    const mdFilePaths = treeRes.data.tree
      .filter(item => item.type === 'blob' && item.path.endsWith('.md'))
      .map(item => item.path)
    // 3. 批量拉取所有md文件内容
    const mdRequests = mdFilePaths.map(path => 
      axios.get(`https://raw.githubusercontent.com/${GITHUB_CONFIG.owner}/${GITHUB_CONFIG.repo}/${GITHUB_CONFIG.branch}/${path}`)
    )
    const mdResponses = await Promise.all(mdRequests)
    const mdContents = mdResponses.map((res, index) => ({
      path: mdFilePaths[index],
      content: res.data
    }))
    console.log('所有md文件信息:', mdContents)
    return mdContents
  } catch (error) {
    console.error('操作失败:', error)
  }
}

注意事项

  • 未配置GitHub Token调用公开仓库接口时,单IP每小时最多请求60次,小仓库文件量少的场景足够使用
  • 拉取到的所有md内容会按顺序存储在数组中,你可以直接遍历该数组渲染表格

内容的提问来源于stack exchange,提问作者Fillipo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:03