URLSession:有什么方法可以在下载文件时读取文件?
URLSession: Any way to read a file as it is being downloaded?
用例是我希望用户能够预览远程托管的歌曲 URL。好吧,你说,就用 AVPlayer 吧。是的,但是如果在预览过程中完全下载文件,我希望能够在本地缓存文件。据我所知,无法访问 AVPlayer 为其流式播放下载的本地数据。同样,在完全下载之前,无法访问 URLSession 下载的数据。所以,我想使用以下方法之一找到结果:
- AVPlayer 完成下载后访问数据并保存到文件。
- 将数据逐步下载到缓存 URL 并在有足够的数据可用时让 AVPlayer 播放它。
这两种情况都有可能吗?有没有其他场景可以实现我想要做的事情?
所以这个问题的解决方案来自 AlamoFire
源代码。如果您以传统的非组合方式使用 URLSessionDataTask
并且有一个符合 URLSessionDataDelegate
的控制器,那么您可以实现 urlSession(_:dataTask:didReceive:)
协议方法来接收到达的数据,而不是而不是在完成时等待接收它。这允许您直接将数据写入您选择的文件,该文件完全由您的应用程序控制。
用例是我希望用户能够预览远程托管的歌曲 URL。好吧,你说,就用 AVPlayer 吧。是的,但是如果在预览过程中完全下载文件,我希望能够在本地缓存文件。据我所知,无法访问 AVPlayer 为其流式播放下载的本地数据。同样,在完全下载之前,无法访问 URLSession 下载的数据。所以,我想使用以下方法之一找到结果:
- AVPlayer 完成下载后访问数据并保存到文件。
- 将数据逐步下载到缓存 URL 并在有足够的数据可用时让 AVPlayer 播放它。
这两种情况都有可能吗?有没有其他场景可以实现我想要做的事情?
所以这个问题的解决方案来自 AlamoFire
源代码。如果您以传统的非组合方式使用 URLSessionDataTask
并且有一个符合 URLSessionDataDelegate
的控制器,那么您可以实现 urlSession(_:dataTask:didReceive:)
协议方法来接收到达的数据,而不是而不是在完成时等待接收它。这允许您直接将数据写入您选择的文件,该文件完全由您的应用程序控制。