用 /api/filetree/getPathByID 获取到存储路径不能用于 /api/file/getFile 获取文件内容

我的目的是通过笔记 id 获取笔记的内容

根据 API 文档的介绍,我先调用 /api/filetree/getPathByID,将笔记 id 作为参数传入,获得存储路径,再调用 /api/file/getFile,将存储路径传入,获得笔记内容。

但是失败了,代码如下

获得存储路径的函数

def get_doc_path(doc_id: str) -> Optional[str]: """根据文档ID获取存储路径 Args: doc_id: 文档ID Returns: Optional[str]: 文档存储路径(相对路径),找不到返回None """ try: response = requests.post( f"{API_URL}/api/filetree/getPathByID", headers=HEADERS, json={ "id": doc_id, } ) response.raise_for_status() path_data = response.json()['data'] logger.info(f"成功获取文档 {doc_id} 的路径信息") return path_data except requests.exceptions.RequestException as e: logger.error(f"获取文档路径失败: {str(e)}") return None except KeyError: logger.error("API响应格式异常") return None

我发现 /api/filetree/getPathByID 这个 API 返回的结果与示例不同,示例中返回的是 "data": "/20210828150719-r8edxl2/20210917220056-yxtyl7i.sy" 格式,但是实际返回的是 '/20241011110802-mzcduqr.sy' 这种格式

然后作为入参传入下面的函数,获取文件内容

def get_file_content(file_path: str) -> Optional[str]: """根据文件路径获取文件内容 Args: file_path: 文件相对路径(例如"/20241011110751-egvrqqh.sy") Returns: Optional[str]: 文件内容字符串,获取失败返回None """ try: response = requests.post( f"{API_URL}/api/file/getFile", headers=HEADERS, json={ "path": "/data" + file_path # 使用从get_doc_path获取的路径 } ) response.raise_for_status() content = response.json()['data'] logger.info(f"成功获取文件 {file_path} 的内容") return content except requests.exceptions.RequestException as e: logger.error(f"获取文件内容失败: {str(e)}") return None except KeyError: logger.error("API响应格式异常") return None

我注意到参考示例中再路径前面还加了/data,所以我在代码中也加了,参考中是这么写的

{ "path": "/data/20210808180117-6v0mkxr/20200923234011-ieuun1p.sy" }

但是调用结果还是

'{"code":404,"msg":"CreateFile C:\\\\Users\\\\kursk\\\\SiYuan\\\\data\\\\20241011110802-mzcduqr.sy: The system cannot find the file specified.","data":null}'

请问问题可能出在哪里?

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26746 引用 • 111461 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    10329 引用 • 46895 回帖 • 62 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • kursk2024

    按照顺序调用这两个函数的 main 函数代码

    def main(): """主函数,程序入口""" try: # 1. 获取笔记本文档树 logger.info(f"📂 正在获取笔记本 {NOTEBOOKID} 的文档结构...") doc_tree = get_doc_tree(NOTEBOOKID) if not doc_tree: logger.error("❌ 无法获取文档树,请检查:") logger.error("1. 笔记本ID是否正确") logger.error("2. 思源服务是否正常运行") return logger.info(f"🌳 文档树包含 {len(doc_tree)} 个根节点") # 示例:提取所有文档ID def collect_doc_ids(items, id_list=None): """递归收集文档ID""" id_list = id_list or [] for item in items: if item.get('id'): id_list.append(item['id']) if item.get('children'): collect_doc_ids(item['children'], id_list) return id_list all_doc_ids = collect_doc_ids(doc_tree) logger.info(f"📚 共发现 {len(all_doc_ids)} 个文档") logger.debug(f"前5个文档ID示例:{all_doc_ids[:5]}") # 2. 原有文档处理流程 if all_doc_ids: # 使用第一个文档作为示例 sample_doc_id = all_doc_ids[0] logger.info(f"\n🔍 开始处理示例文档:{sample_doc_id}") # 获取文档路径 doc_path = get_doc_path(sample_doc_id) if not doc_path: return # 获取文件内容 file_content = get_file_content(doc_path) if file_content: logger.info(f"📄 文档内容类型:{type(file_content)}") logger.info(f"内容摘要(前100字符):\n{file_content[:100]}...") except Exception as e: logger.error(f"‼️ 程序运行出错: {str(e)}") raise
  • 88250

    getPathByID 获取的只是 文档 Path,不包括 笔记本 ID,而 getFile 需要的路径参数是相对于工作空间的路径,也就是 工作空间/data/笔记本 ID/文档 Path。

    下个版本会变更 getPathByID 接口,返回值中加入 笔记本 ID,请关注 Issue #14275 · siyuan-note/siyuan

    1 回复
  • kursk2024

    thanks,已解决

推荐标签 标签

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖 • 4 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 687 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 696 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    232 引用 • 484 回帖
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 183 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖 • 1 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 836 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖 • 2 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 59 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 451 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 6 关注
  • sts
    2 引用 • 2 回帖 • 247 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 758 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 10 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    29 引用 • 230 回帖 • 123 关注
  • 笔记

    好记性不如烂笔头。

    312 引用 • 794 回帖
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 339 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    500 引用 • 1396 回帖 • 251 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 5 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 44 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 411 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    46 引用 • 114 回帖 • 159 关注
  • Follow
    4 引用 • 12 回帖 • 11 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    119 引用 • 323 回帖
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 1 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖