后端前端云原生【免费下载链接】hedgedocHedgeDoc - Ideas grow better together项目地址https://gitcode.com/gh_mirrors/he/hedgedoc点击查看免费下载HedgeDoc 支持将笔记中的图片上传存储到多种后端本地文件系统、S3、Azure Blob、imgur、WebDAV其中 WebDAV 方案允许你复用任意支持 WebDAV 协议的服务器来托管上传文件。本文将基于仓库文档与源码完整讲解HD_MEDIA_BACKEND_WEBDAV_*三个环境变量的含义与取值规则并以 Nextcloud 为例给出从创建应用密码到验证上传的完整实操步骤。读完本文你可以独立为 HedgeDoc 配置一套基于 WebDAV/Nextcloud 的图片存储服务。一、WebDAV 媒体后端的工作原理在 HedgeDoc 中媒体Media指与笔记关联的上传内容目前仅支持图片。所有存储后端都必须实现同一个接口包含三个方法见 backend/src/media/media-backend.interface.ts 与设计文档 docs/content/concepts/media.mdsaveFile(uuid, buffer, fileType)保存文件并返回一段字符串化的元数据供数据库留存该元数据只在本后端内部使用deleteFile(uuid, metadata)根据 UUID 与元数据删除远端文件getFileUrl(uuid, metadata)返回该文件对外可访问的 URL。对于 WebDAV 后端HedgeDoc 会在启动时通过PROPFIND请求探测目标目录是否可访问见 webdav-backend.ts若请求失败会直接抛错提示Cant access url。因此配置完成并启动后WebDAV 服务器必须允许 HedgeDoc 以配置的凭据访问目标目录。后端的选择在 backend/src/media/media.module.ts 中注册由 MediaService 依据HD_MEDIA_BACKEND_TYPE的值filesystem/azure/imgur/s3/webdav决定实例化哪一个后端。上传时MediaService.saveFile会先对文件做 MIME 类型白名单校验仅允许 apng、bmp、gif、heif/heic、jpeg、png、svg、tiff、webp见 media.service.ts再调用WebdavBackend.saveFile完成写入。二、核心配置三个 WebDAV 环境变量在 HedgeDoc 中所有配置均通过环境变量或根目录.env文件注入。WebDAV 后端只需在配置中加入以下三行CONNECTION_STRING、UPLOAD_DIR、PUBLIC_URL需替换为实际值HD_MEDIA_BACKEND_TYPEwebdav HD_MEDIA_BACKEND_WEBDAV_CONNECTION_STRINGCONNECTION_STRING HD_MEDIA_BACKEND_WEBDAV_UPLOAD_DIRUPLOAD_DIR HD_MEDIA_BACKEND_WEBDAV_PUBLIC_URLPUBLIC_URL对应地仓库中的配置解析backend/src/config/media.config.ts对这三个变量有明确的校验规则这与使用体验直接相关环境变量说明校验要求是否必填HD_MEDIA_BACKEND_TYPE媒体后端类型取webdav时启用本后端必须与五种后端类型之一精确匹配必填HD_MEDIA_BACKEND_WEBDAV_CONNECTION_STRINGWebDAV 服务器的连接地址含身份信息必须是一个合法的 URLzod 的z.string().url()必填HD_MEDIA_BACKEND_WEBDAV_UPLOAD_DIR上传目标目录省略则直接上传到 WebDAV 服务器根目录可选字符串可为空可选HD_MEDIA_BACKEND_WEBDAV_PUBLIC_URLHedgeDoc 对外访问上传文件的 URL 前缀必须是一个合法的 URL必填配置解析使用 zod 校验同文件中z.discriminatedUnion(type, [...])定义一旦HD_MEDIA_BACKEND_TYPE之外的关键值非法或缺失启动时会打印格式化的错误信息并退出避免带病运行。2.1 CONNECTION_STRING连接地址与身份凭据CONNECTION_STRING采用 WebDAV 常见的schema://user:passwordurl形式把用户名与密码如有需要直接内嵌进 URL例如https://TestUser:passw0rdcloud.example.com/remote.php/dav/files/TestUser/从源码看WebdavBackend 会解析该 URL先以完整连接串为基准若同时配置了非空的UPLOAD_DIR则把目录拼接在连接串之后作为最终上传基址随后用url.username与url.password生成 HTTP Basic Auth 请求头Basic base64(username:password)见 webdav-backend.ts。2.2 UPLOAD_DIR指定上传目录可省略UPLOAD_DIR用于指定上传的目标文件夹例如HedgeDoc。它不是必填项——如果不设置即完全不写该变量HedgeDoc 会把文件直接上传到 WebDAV 服务器的根目录。源码中的对应逻辑是仅当uploadDir存在且非空字符串时才拼接目录webdav-backend.ts。2.3 PUBLIC_URL对外访问 URL 前缀PUBLIC_URL指定 HedgeDoc 访问上传文件所用的 URL 前缀。文件名会被直接追加到该前缀之后。例如PUBLIC_URL为https://dav.example.com、文件名为test.png时访问地址即为https://dav.example.com/test.png。这与源码行为完全一致getFileUrl 从数据库元数据中取出文件名再将其拼接到publicUrl之后返回MediaService.getFileResponse 对 WebDAV 这类后端返回{ type: redirect, url }由媒体重定向控制器backend/src/media-redirect/media-redirect.controller.ts将浏览器 302 到该地址。因此PUBLIC_URL必须指向一个能让浏览器直接下载到图片的公开地址。三、上传与删除的底层行为理解后端的 HTTP 细节有助于排查故障。WebdavBackend内部使用fetch与 WebDAV 服务器交互上传saveFile以PUT方法请求baseUrl/uuid.扩展名携带Authorization、Content-Type: application/octet-stream与准确的Content-Length并设置If-None-Match: *头保证不会覆盖已存在的文件见 webdav-backend.ts。上传成功后后端把{file:uuid.ext}这样的 JSON 字符串作为 backendData 写入数据库的media_upload表删除deleteFile以DELETE方法请求baseUrl/文件名见 webdav-backend.ts访问getFileUrl如上所述仅拼接publicUrl与文件名不发起请求。需要特别注意的是CONNECTION_STRING中携带的用户名/密码会出现在配置文件里因此官方文档建议为上传单独创建一个专用 WebDAV 用户并尽量使用应用密码App Password而不是主密码。四、Nextcloud 实战配置完整步骤以 Nextcloud 作为 WebDAV 服务器是最常见的用法。以下步骤以 Nextcloud 212021 年 4 月撰写指南时的版本为例演示用户名为TestUser、生成的应用密码为passw0rd的完整配置链路。由于连接串中包含用户名与密码强烈建议使用一个专用 Nextcloud 用户来承担上传任务。创建应用密码登录 Nextcloud 后进入SettingsSecurity由 Nextcloud 生成一个应用密码本例假设为passw0rd。创建上传文件夹在文件Files应用中新建一个文件夹用于存放上传内容例如HedgeDoc。共享该文件夹右键/菜单共享刚创建的文件夹。默认配置为Read Only只读本指南按此假设展开选择Allow upload and editing允许上传和编辑同样可行。获取共享链接创建共享后链接通常已在剪贴板否则点击Share link一行末尾的剪贴板图标复制。本例假设共享链接为https://cloud.example.com/s/some-id。拼接下载参数在该链接末尾追加/download?path%2Ffiles得到https://cloud.example.com/s/some-id/download?path%2Ffiles。这正是之后PUBLIC_URL的取值HedgeDoc 会把文件名追加到其后使图片通过共享链接的下载端点对外提供。获取 Nextcloud 的 WebDAV 地址在文件应用的左下角位于SettingsWebDAV处。本例假设为https://cloud.example.com/remote.php/dav/files/TestUser/。拼入登录信息在 URL 协议通常是https://与 URL 其余部分本例为cloud.example.com/remote.php/dav/files/TestUser/之间插入username:password得到https://TestUser:passw0rdcloud.example.com/remote.php/dav/files/TestUser/。这就是CONNECTION_STRING。配置 HedgeDocHD_MEDIA_BACKEND_TYPEwebdav HD_MEDIA_BACKEND_WEBDAV_CONNECTION_STRINGhttps://TestUser:passw0rdcloud.example.com/remote.php/dav/files/TestUser/ HD_MEDIA_BACKEND_WEBDAV_UPLOAD_DIRHedgeDoc HD_MEDIA_BACKEND_WEBDAV_PUBLIC_URLhttps://cloud.example.com/s/some-id/download?path%2Ffiles完成上述配置后重启 HedgeDoc 服务即可开始使用由 Nextcloud WebDAV 支撑的图片上传上传时文件以uuid.扩展名的命名写入TestUser的HedgeDoc目录笔记中的图片通过共享链接的下载地址对外展示。五、验证与常见问题启动即验证WebdavBackend构造时会对baseUrl发起一次PROPFINDDepth: 0请求非 2xx 响应或网络失败都会导致启动报错Cant access url。若服务起不来优先检查连接串的协议、主机、目录与凭据。PUBLIC_URL 必须可公开访问它仅用于拼 URLHedgeDoc 自身不代理图片字节流而是返回 302 重定向。请确认浏览器可以直接访问PUBLIC_URL 文件名。文件不会被覆盖上传请求带If-None-Match: *同名文件UUID 冲突会失败而不是覆盖确保历史图片引用不被破坏。目录与凭据的转义用户名、密码若含、:、/等特殊字符需按 URL 编码规则转义否则 URL 解析与 Basic Auth 会出错。配置格式要求CONNECTION_STRING与PUBLIC_URL必须是合法 URLUPLOAD_DIR可省略若省略上传目录文件将落在 WebDAV 服务器根目录。六、相关资源官方文档docs/content/references/config/media/webdav.md本文的原始依据配置解析与校验backend/src/config/media.config.tsWebDAV 后端实现backend/src/media/backends/webdav-backend.ts媒体后端统一接口backend/src/media/media-backend.interface.ts媒体服务与后端选择逻辑backend/src/media/media.service.ts后端注册backend/src/media/media.module.ts媒体设计文档docs/content/concepts/media.md环境变量总体说明docs/content/references/config/index.md赞分享后端前端云原生【免费下载链接】hedgedocHedgeDoc - Ideas grow better together项目地址https://gitcode.com/gh_mirrors/he/hedgedoc点击查看免费下载相关推荐使用 S3 兼容对象存储作为 HedgeDoc 图片上传后端环境变量配置与源码实现全解析使用 S3 兼容对象存储作为 HedgeDoc 图片上传后端环境变量配置与源码实现全解析 本文以 HedgeDoc 官方配置文档 docs/content/r后端前端云原生HedgeDoc 图片上传存储配置指南使用本地文件系统Filesystem作为媒体后端HedgeDoc 图片上传存储配置指南使用本地文件系统Filesystem作为媒体后端 HedgeDoc 支持将笔记中上传的图片保存到多种存储后端其中最后端前端云原生HedgeDoc 使用 Imgur 作为图片上传后端配置指南与源码原理HedgeDoc 使用 Imgur 作为图片上传后端配置指南与源码原理 导读 HedgeDoc 将笔记中上传的图片Media统一交由可插拔的存储后端处理后端前端云原生上一篇sd-forge-layerdiffusion开发者指南代码架构与自定义扩展开发下一篇代码辅助every-chatgpt-gui专为开发者设计的ChatGPT界面创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
玉米生长阶段检测数据集:农业AI落地的最小可信单元 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 2:55:08
Jetson Orin NX散热调优:从温度墙到MAXN模式稳定性能实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 2:55:08
剪映操作|人物发丝抠不干净怎么办 适用对象:图片与素材处理任务的创作者。本文只处理“人物发丝抠不干净怎么办?”这一件事。先确定这一条要解决什么最稳的做法是:处理“人物发丝抠不干净怎么办?”,先保留原图/原片,用一张或一小段做样&… · 2026/9/28 3:31:15
顺义本土正骨名医——苏荫来的故事 在顺义本地骨伤正骨领域,有这样一位深耕三十余年的实力派老医者,一身古法正骨手艺,一手传承绝活,专治各类筋骨伤痛,凭借精准的手法、扎实的疗效、踏实的行医作风,深得邻里百姓信赖与认可。他就是杏园金方首… · 2026/9/28 3:29:27
2026实测百度网盘直链助手脚本,速度超越PanDownload工具 随着我们手头的各种文档和视频资料越来越大,网盘在数据流转中扮演的角色也越来越重要。不管是工作交接还是备份生活点滴,它都帮了我们不少忙。
不过在日常使用中,偶尔遇到下载变慢也确实会让人感到有些苦恼。面对这种现象我们除了可以配合Pa… · 2026/9/28 3:29:08
剪映操作|输入文字后,能不能自动生成虚拟主播、配音和字幕 适用对象:AI视频生成任务的创作者。本文只处理“输入文字后,能不能自动生成虚拟主播、配音和字幕?”这一件事。先确定这一条要解决什么先给结论:处理“输入文字后,能不能自动生成虚拟主播、配音和字幕?”&a… · 2026/9/28 3:28:21
运算符 文件操作 6 运算符:算数运算: - * / % ////:整除%:求余比较运算:> < > < !赋值运算 : - *a21
b2
a,bb,a#只适合python
print(a)#2
print(b)#21逻辑运算:and or not当and,or… · 2026/9/28 3:27:47
字符集和编码 bytes 5 字符集和编码ascii——编排了128个文字字符,只需要7个0和1就可以表示了——1 byte8 bitANSI——每个字符 16 bit,2byteGBK编码Unicode:万国码utf-8:最短的字节长度8 英文:8bit,1 byte总结:as… · 2026/9/28 3:27:28
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
制作网页比较方便的软件怎么选?一文搞懂避坑指南 制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25