用 /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}'

请问问题可能出在哪里?

  • 思源笔记

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

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

    26375 引用 • 109689 回帖
  • Q&A

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

    10148 引用 • 46117 回帖 • 63 关注

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 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
  • 其他回帖
  • kursk2024

    thanks,已解决

  • 88250

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

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

    1 回复

推荐标签 标签

  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    336 引用 • 324 回帖 • 2 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 241 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 1 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖 • 1 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 2 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖 • 1 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 15 关注
  • Q&A

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

    10148 引用 • 46117 回帖 • 63 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 713 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 409 关注
  • 人工智能

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

    115 引用 • 319 回帖
  • LeetCode

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

    209 引用 • 72 回帖 • 2 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    268 引用 • 666 回帖 • 2 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 2 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    955 引用 • 944 回帖
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 643 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 43 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • 倾城之链
    23 引用 • 66 回帖 • 168 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖 • 3 关注
  • Spring

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

    948 引用 • 1460 回帖
  • 笔记

    好记性不如烂笔头。

    311 引用 • 794 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖 • 1 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    93 引用 • 122 回帖 • 616 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 3 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖