问题标签 [nsurlsessiondownloadtask]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
11649 浏览

ios - NSURLSessionDataTask 与 NSURLSessionDownloadTask 有什么区别

在最新的苹果中引入了新NSURLSession的替换,所以有不同的任务,NSURLConnection那么有什么区别?NSURLSessionDataTaskNSURLSessionDownloadTask

在哪种情况下使用NSURLSessionTask以及在哪里使用NSURLSessionDownloadTask

0 投票
3 回答
12648 浏览

ios - 下载 iOS 时流式传输视频

我正在使用 iOS 7,并且我有一个 .mp4 视频需要在我的应用程序中下载。视频很大(约 1 GB),这就是为什么它不包含在应用程序中的原因。我希望用户能够在开始下载后立即开始观看视频。我还希望视频能够缓存在 iOS 设备上,这样用户以后就不需要再次下载了。两种播放视频的常规方法(渐进式下载和实时流式传输)似乎都不允许您缓存视频,因此我创建了自己的 Web 服务,将我的视频文件分块并将字节流式传输到客户端。我使用 NSURLConnection 启动流式 HTTP 调用:

当我收到一个数据块时,我将它附加到文件的本地副本的末尾:

如果我让设备运行,则文件下载成功,我可以使用 MPMoviePlayerViewController 播放它:

但是,如果我在文件完全下载之前启动播放器,视频就可以正常播放了。它甚至在顶部洗涤栏上显示了正确的视频长度。但是,当用户到达视频开始之前我已完成下载的视频位置时,视频就会挂起。如果我关闭并重新打开 MPMoviePlayerViewController,则视频会一直播放到我再次启动 MPMoviePlayerViewController 时所处的位置。如果我等到整个视频下载完毕,则视频播放没有问题。

发生这种情况时,我没有触发任何事件,也没有将错误消息打印到控制台(视频开始后永远不会发送 MPMoviePlayerPlaybackStateDidChangeNotification 和 MPMoviePlayerPlaybackDidFinishNotification)。似乎还有其他东西告诉控制器视频的长度是什么,而不是擦洗器正在使用的......

有谁知道可能导致此问题的原因是什么?我不一定要使用 MPMoviePlayerViewController,所以如果在这种情况下可以使用不同的视频播放方法,我完全赞成。

相关未解决的问题:

使用 AVURLAssets 的 AVPlayer 和渐进式视频下载

iOS 上的渐进式视频下载

如何在 IOS 中播放正在下载的视频文件

更新 1 我发现视频停顿确实是因为视频开始播放时的文件大小。我可以通过在开始下载之前创建一个归零文件并在进行时覆盖它来解决这个问题。由于我可以控制视频流服务器,因此我添加了一个自定义标头,以便我知道正在流式传输的文件的大小(流式传输文件的默认文件大小标头为 -1)。我正在我的 didReceiveResponse 方法中创建文件,如下所示:

这很好用,除了 truncate 导致应用程序在磁盘上创建 ~1GB 文件时挂起大约 10 秒(在模拟器上它是即时的,只有真实设备有这个问题)。这就是我现在卡住的地方 - 有没有人知道一种更有效地分配文件的方法,或者另一种让视频播放器识别文件大小而无需实际分配的方法?我知道一些文件系统支持“文件大小”和“磁盘大小”作为两个不同的属性......不确定iOS是否有类似的东西?

0 投票
1 回答
1997 浏览

ios - NSURLSession 间歇性 SSLHandshake failed (-9810) 错误

从安全墙后面的安全 URL 下载图像。像https://foo.com/bar.png这样的 URL

有时我会收到 SSLHandshake 错误。有时错误发生一次,但有时错误是恒定的,我无法下载文件。

我使用以下代码来处理挑战

即使它完全失败并且无法加载,我仍然可以跳到 Safari,输入 URL 并加载它。因此,我正在寻找会导致此问题的想法,而不是糟糕的网络问题或托管 Web 服务器的参差不齐的问题。

0 投票
1 回答
1184 浏览

afnetworking-2 - 如何在 AFNetworking 2 中使用 POST + 参数下载经过身份验证的文件?

我需要下载经过身份验证的文件。我在 python 端有这个:

这在使用 python 请求库/浏览器时工作正常。

然后我在iOS中有这个:

请求通过,但 responseObject 为nil.

所以我尝试:

这是很多重复。所以:

1)是否可以使用 NSURLSessionDownloadTask 并能够发送参数self.session POST

2)或者self.session POST获取文件?

0 投票
1 回答
192 浏览

php - 使用 PHP 返回目录列表

我正在使用以下内容返回服务器上所有文本文件的列表。

我遇到的问题是,当我从我的应用程序执行这个 php 文件时,目录中只有一个文本文件,它按预期返回文件名的 JSON,但是当我重命名该文本文件或添加其他文件时,它会继续仅返回原始运行时存在的文件的名称。

我对 PHP 很陌生,我想知道我是否返回缓存数据而不是每次都刷新,或者这可能是我的应用程序发生的情况。

这是应用程序代码:

谢谢!

0 投票
2 回答
1064 浏览

cocoa-touch - NSURLSessionDownloadTask 并发下载,app 后台也支持,没有按预期工作

要求:

我有一个视图控制器类,我在其中显示一个集合视图。在每个单元格中,我正在检查图像是否已经存在于本地,如果它不存在,那么我正在尝试从服务器下载图像并显示相同的图像。

执行:

下面是相同的代码:

在会话控制器类中,我有以下方法来启动新的下载任务:

在上述方法中,我将 successHandler 和 failureHandler 块存储在字典中,使用其任务标识符将其映射到下载任务。

下面是 didFinishDownloadingToURL 方法的实现:

我的问题是 -有时在上述方法中,downloadTask 返回的标识符与在 setupAndStartDownloadTaskForProduct 中启动的标识符不同,因此 successCompletionHandler 被获取为 nil,并且当我尝试调用处理程序块时应用程序崩溃。

现在我的问题是:

  1. 为什么在 didFinishDownloadingToURL 中我得到的标识符与在 setupAndStartDownloadTaskForProduct 中启动的标识符不同?

  2. 如果这是预期的行为,那么实现我的要求的最佳方法是什么?

0 投票
1 回答
206 浏览

ios - 如果我想使用 NSURLSession 获取图像下载的进度,我是否必须使用下载方法而不是数据?

NSURLSession 有NSURLSessionDataTask而且NSURLSessionDownloadTask我更喜欢数据,因为我不需要从文件系统中检索它。

NSURLSessionDownloadTaskDelegate有一个检索下载进度的方法,尽管数据对应项似乎没有。如果我想要下载进度,我需要使用NSURLSessionDownloadTask吗?

如果是这样,我了解NSURLSessionDownloadTask存储下载的文件,然后您检索它。这个存储文件的目录是否需要偶尔清空,或者它只是一个临时存储,一旦访问它就会被删除?

0 投票
3 回答
4287 浏览

ios - 如何检查 NSData blob 作为 NSURLSessionDownloadTask 的 resumeData 是否有效?

我有一个使用新NSURLSessionAPI 进行后台下载的应用程序。当下载以提供的方式取消或失败时NSURLSessionDownloadTaskResumeData,我会存储数据 blob,以便以后可以恢复。我注意到在野外发生崩溃的时间非常少:

错误发生在这里,blob 在哪里并且resumeData是一个实例:NSDatasessionNSURLSession

数据由 Apple API 提供,经过序列化,然后在稍后的时间点反序列化。它可能已损坏,但永远不会为零(如 if 语句检查)。

如何提前检查resumeData无效,以免应用程序崩溃?

0 投票
1 回答
1869 浏览

ios - 如何从完成的 `NSURLSessionDataTask` 中获取数据?

我知道我可以dataTaskWithURL:completionHandler:用来获取 completionHandler 块中的数据,但这会阻止委托方法触发,我需要触发该didReceiveData:方法,因为这是我配置进度指示器的方式。

一旦完成,我完全不知道如何获取下载的数据。什么是完成块的委托方法等价物?didCompleteWithError似乎没有返回任何NSData.

我不必手动将数据拼凑在一起didReceiveData,对吗?当 completionHandler 把它交给你时,这似乎真的很糟糕。如果不是因为我可以一次下载 50 多个东西,我不介意这样做,所以跟踪所有部分数据似乎很痛苦。我应该切换到NSURLSessionDownloadTask吗?

0 投票
4 回答
3196 浏览

ios - iOS downloadTaskWithRequest 在 iPhone 上的后台会话中调用时返回 nil,在模拟器中工作

有任何想法吗?

2014 年 9 月 12 日更新:我又遇到了这个问题,谷歌搜索并找到了这个 SO 帖子,然后看到我是这个问题的作者!这一次-URLSession:task:didCompleteWithError甚至没有被召唤。解决方案是重新启动我的手机。这一定是苹果的错误。我在我的 iPhone 5s 上运行 iOS7。