我怎样才能真正 download/transfer 使用 UPnP 找到的文件?

How can I actually download/transfer a file found using UPnP?

我完全不了解 UPnP 作为协议,但我希望使用它来将文件从索尼相机传输到我正在开发的 iOS 应用程序。到目前为止,我有 SSDP 发现设置,我可以读取 UPnP 客户端的服务,搜索文件夹和访问文件名,但我遇到的最后一个障碍是一旦我能够实际 download/transfer 文件列出它们!

我最终得到的是以下内容:

<item id="04_02_0624600856_000001_000001_000000" restricted="1" parentID="03_01_0624600856_000001_000000_000000">
  <dc:title>DSC05076.ARW</dc:title>
  <upnp:class>object.item.imageItem.photo</upnp:class>
  <dc:date>2018-08-23T12:24:21</dc:date>
  <res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_CI=1">http://192.168.122.1:60151/SM_DSC05076.ARW?%2104%5f02%5f0624600856%5f000001%5f000001%5f000000%21http%2dget%3a%2a%3aimage%2fjpeg%3aDLNA%2eORG%5fPN%3dJPEG%5fSM%3bDLNA%2eORG%5fCI%3d1%21%21%21%21%21</res>
  <res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_CI=1">http://192.168.122.1:60151/LRG_DSC05076.ARW?%2104%5f02%5f0624600856%5f000001%5f000001%5f000000%21http%2dget%3a%2a%3aimage%2fjpeg%3aDLNA%2eORG%5fPN%3dJPEG%5fLRG%3bDLNA%2eORG%5fCI%3d1%21%21%21%21%21</res>
  <res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_CI=1">http://192.168.122.1:60151/TN_DSC05076.ARW?%2104%5f02%5f0624600856%5f000001%5f000001%5f000000%21http%2dget%3a%2a%3aimage%2fjpeg%3aDLNA%2eORG%5fPN%3dJPEG%5fTN%3bDLNA%2eORG%5fCI%3d1%21%21%21%21%21</res>

我会(根据我对简单 HTTP API 的天真经验)然后期望能够通过点击以下命令简单地下载有问题的文件: http://192.168.122.1:60151/SM_DSC05076.ARW 或类似文件(我假设我必须稍微更改此 URL,因为文件被列为 image/jpeg 而不是 RAW?

无论我尝试完整 res 对象的任何组合,剪切位,解码 url e.t.c。尝试访问有问题的 URL 时,我总是收到 404 响应。我需要在这里做一些更复杂的事情吗?或者我缺少的简单的东西?

提前致谢!

这里的问题是我使用的是上一个会话中的 url。事实证明 urls 在连接会话之间发生变化,这就是我收到 404 的原因。

经验教训:UPnP 是高度动态的,您不能依赖在其访问 MRL 下缓存图像!