移动硬盘做了一个小型NAS服务器。使用node通过DLNA协议访问,代理客户端的请求。
开始需求为:将硬盘里儿子的照片展示在页面上,添加某些照片的备注即修改照片的元数据信息(主要是userComment)。展示功能完成开始学习修改元数据功能的技术时,发现了几个问题,实现起来不太容易,被迫放弃修改元数据功能,仅有展示功能。修改照片元数据功能打算另外写一个工具。
**题外话:**搜索设备代码写好后,我家里支持DLNA协议访问的设备都让我搜出来了,看到【小度大金刚】的名字时,感觉有点好玩。之前在老家待产时,发现家里电视和空调都有官方app可以手机遥控。自己鼓捣一个app“一统天下”莫名觉得还是很有成就感的样子。
- 读写图片元数据需要分析图片的格式,.jpeg/.png/.heic等等后缀名的图片格式都不一样;
- 远程修改NAS服务器上图片元数据(主要这一步迫使我放弃);
- ssdp协议查找设备时,注意精确传入服务参数;
- controllers:控制器
- routes:路由
- utils:工具包
- browseroot.data发送soap请求时,需要发送的xml内容
- Device.js关于搜索DLNA设备的封装
- soap.js封装的发送soap请求方法
- app.js:入口文件
- note.md:笔记
#使用koa2脚手架生成项目
koa2 <projectName>
#启动服务
npm start
- node-ssdp使用ssdp协议搜索DLNA设备
- upnp-device-client用ssdp协议发现的设备描述配置文件地址实例化一个客户端,用来获取设备的信息
- fast-xml-parser解析xml文件
- 使用SSDP协议找到设备,获取到关于设备的根目录描述文件
rootDesc.xml
地址; - 获取到
rootDesc.xml
文件内容,解析xml文件转化成js对象,拿到urn:upnp-org:serviceId:ContentDirectory
服务的controlURL
以及其他关键信息,比如设备名称等; - 新建
browseroot.data
配置文件,读取文件内容,使用soap协议发送请求,获取到根目录的内容; - 获取到根目录的
ObjectId
,再次发送soap请求获取子目录内容; - 子目录有文件时,解析xml文件,获取到文件的信息。
参考资料: