gpt4 book ai didi

ios - 在 iOS8 中使用 NSUrlSession 使用流请求进行后台上传

转载 作者:行者123 更新时间:2023-11-29 12:28:57 32 4
gpt4 key购买 nike

以前在 iOS7 中,当我们尝试在后台使用流请求上传时,我们会遇到以下异常

由于未捕获的异常“NSGenericException”而终止应用程序,原因:“后台 session 中的上传任务必须来自文件”

但在iOS8中,当我们尝试在后台使用流上传时,也不异常(exception)。

现在我的问题是

1) 在 iOS8 中是否允许使用 uploadTaskWithStreamedRequest: 上传后台程序?

2) 在 iOS8 中,我使用后台 NSURLConfiguration 和 uploadTaskWithStreamedRequest。我正在使用 -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task needNewBodyStream:(void (^)(NSInputStream *))completionHandler 向 NSUrlSession 提供流。当应用程序处于前台时,它工作正常并将我的文件上传到服务器。但是一旦应用程序进入后台,流就会结束并且 NSURLSession 完成并出现以下错误

Error Domain=NSURLErrorDomain Code=-997 “失去与后台传输服务的连接”

我认为当应用进入后台时我的流结束。现在我的问题是我应该在哪个 runloop 中安排我的 Stream 或者让我知道我的理解是否有任何错误。

-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task needNewBodyStream:(void (^)(NSInputStream *))completionHandler
{
// Open producer/consumer streams. We open the producerStream straight
// away. We leave the consumerStream alone; NSURLConnection will deal
// with it.
NSLog(@"%@", [NSThread currentThread]);
NSInputStream *consStream;
NSOutputStream *prodStream;
[NSStream createBoundInputStream:&consStream outputStream:&prodStream bufferSize:SFAMaxBufferLength];
assert(consStream != nil);
assert(prodStream != nil);
self.consumerStream = consStream;
self.producerStream = prodStream;
self.producerStream.delegate = self;
[self.producerStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[self.producerStream open];
// Set up our state to send the body prefix first.
self.buffer = [self.bodyPrefixData bytes];
self.bufferLimit = [self.bodyPrefixData length];
completionHandler(self.consumerStream);
}

最佳答案

您无法使用后台配置上传流式任务。我只在两种情况下成功上传数据:

  1. 使用存储在请求正文中的数据下载任务。
  2. 从文件上传任务。在这种情况下,您将不会收到响应正文。

关于ios - 在 iOS8 中使用 NSUrlSession 使用流请求进行后台上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28315141/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com