问题标签 [nsurlsessionuploadtask]

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 投票
2 回答
908 浏览

ios - AFNetworking V 2 是否支持非流式多部分后台上传任务?

我正在做的一个项目需要上传一个视频。用于上传视频的 post API 调用需要多部分正文。我尝试使用的代码包含在问题的底部。

该代码适用于[NSURLSessionConfiguration defaultSessionConfiguration].

如果我将配置更改为[NSURLSessionConfiguration backgroundSessionConfiguration:@"Test Id"],代码会崩溃,因为后台会话仅支持文件上传。错误是:

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Upload tasks in background sessions must be from a file'

可以在以下方法中使用的所有多部分附加方法都使用 AFMultipartBodyStream 类。此类流式传输上传,因此它不能在后台会话中使用,因为流不是文件。

是否可以有一个具有多部分主体的 NSURLSessionUploadTask 可以在使用 backgroundSessionConfiguration 的 AFHTTPSessionManager 中运行?

请参阅下面的示例代码:

0 投票
1 回答
387 浏览

ios8 - NSURLSessionUploadTask 不响应恢复 ios8 Beta3(仅限设备)

在使用后台客户端发送resume方法时,该过程永远不会开始。我无法在模拟器上重现,只能在设备上重现,而且只能在 8.0 上重现。NSURLSessionUploadTaskNSURLSessionConfiguration:backgroundSessionConfiguration:

这不是关于酌情后台任务的问题,resume而是在前台运行,从字面上看,没有任何反应。没有委托回调,没有进展,没有崩溃,没有网络活动,什么都没有。

我备案雷达:://17703428

0 投票
4 回答
2174 浏览

ios - iOS NSURLSessionUploadTask 响应数据

我已经成功实现了 NSURLSessionUploadTask 并在后台和前台工作。但是读取响应数据时出现问题。

这些是上述两个 NSLog 的输出

1 数据:{"成功":true,"数据":[{"uuid":"8BE7DF37-9DA1-44D2-B48C-D012F699A9B1","id":266626},{"uuid":"3406D865-1A41-4FC6 -BA0B-0638F17757CC","id":266656}],"errors":[],"entityName":"LeadProfile"} 结束数据

最后数据:{"success":true,"data":[{"uuid":"8BE7DF37-9DA1-44D2-B48C-D012F699A9B1","id":266626},{"uuid":"3406D865-1A41 -4FC6-BA0B-0638F17757CC","id":266656}],"errors":[],"entityName":"LeadProfile"}{"success":true,"data":[{"uuid":"8BE7DF37 -9DA1-44D2-B48C-D012F699A9B1","id":266626},{"uuid":"3406D865-1A41-4FC6-BA0B-0638F17757CC","id":266656}],"errors":[]," entityName":"LeadProfile"} 结束数据

我想知道为什么这会给我一个上传任务两个不同的响应。self.responseData每个位置有什么不同?

有人认为这是因为苹果网站上提到的原因吗?(因为 NSData 对象通常是由许多不同的数据对象拼凑而成的,所以尽可能使用 NSData 的 enumerateByteRangesUsingBlock: 方法来遍历数据而不是使用 bytes 方法(它将 NSData 对象扁平化为单个内存块)开发人员。苹果网

0 投票
0 回答
307 浏览

ios - NSURLSessionUploadTask 不发送整个文件

我在尝试将文件发送NSURLSessionUploadTask到自定义 REST 服务时遇到问题。问题是文件似乎被传输到任意大小,然后任务停止而没有任何错误(URLSession:task:didCompleteWithError:被调用error设置为nil)。

需要传输的文件大小接近 10MB,我发现较小的文件有时可以正确传输。

我用于创建任务的代码如下:

我需要为服务器指定一些标头以正确解释请求,length变量是正在发送的文件的有效大小。

知道这里发生了什么吗?

谢谢。

0 投票
2 回答
4133 浏览

php - 为什么 NSURLSession uploadTaskWithRequest:fromData: 无法上传到 php 服务器?

php代码工作正常。我已经从同一服务器上的 html 表单上传了文件。上传的文件从 40K 到 2.0M 不等,所以它不是大小。在运行 PHP 5.3 的服务器上激活文件上传

我发现了很多帖子,比如这个(还没有答案):https ://stackoverflow.com/questions/19710388/using-nsurlsession-to-upload-an-image 。

这个使用 uploadTaskWithRequest:fromFile: 而不是 fromData: NSURLSession 确保上传工作

这是 NSURLSessionDataTask 而不是 uploadTaskWithRequest: No data received with NSURLSession

有些帖子似乎说 uploadTaskWithRequest:fromData: 根本不起作用: NSURLSession: 使用后台传输上传资产 使用 NSURLSession 异步上传将不起作用,但同步 NSURLConnection 可以 ,并且 将图像从 iOS 上传到 PHP

我已经制作了应用程序,使其返回 HTTP 代码,我得到代码 200。上传后服务器 error_log 文件中没有任何内容。一切似乎都工作正常,但无论发生什么,文件都不会写入服务器。有什么想法我可以尝试找出问题所在吗?

这是php代码:

这是iOS代码:

我对该文件夹有 777 权限。正如我所说,我已经能够通过 html 表单从同一个 php 脚本上传并写入该文件夹。

对于 http 错误代码,totalResponse 为 200,对于 php 转储,count=0 和 array(0) {}。

这是应用程序中来自服务器的响应的图像:在此处输入图像描述

我在回显上传的临时文件后添加了这些行:

但我只得到了这个:

0 投票
1 回答
1378 浏览

afnetworking - 使用 AFNetwork 上传 NSData 终止我的 APP

我正在尝试使用 AFNetwork 上传图像的 NSData,但是出现了问题,我找不到我的错误在哪里

这是我的代码:

崩溃结果是这样的:

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -streamStatus 仅为抽象类定义。定义 -[AFMultipartBodyStream streamStatus]!' *第一次抛出调用堆栈:( 0 CoreFoundation 0x019d91e4exceptionPreprocess + 180 1 libobjc.A.dylib 0x017588e5 objc_exception_throw + 44 2 CoreFoundation 0x019d8fbb + [NSException raise:格式:] + 139 3 Foundation 0x01433b3b NSRequestConcreteImplementation + 218 4 Foundation 0x0143b746 -[NSStream(NSStream) streamStatus] + 48 5 readWritePlist 0x000333a1 -[AFMultipartBodyStream open] + 49 6 CoreFoundation 0x0199ac44 CFReadStreamOpen + 116 7 CFNetwork 0x026f395d _ZN30CoreReadStreamFromCFReadStream16_streamImpl_OpenEP13CFStreamErrorPh + 53 8 CFNetwork 0x027c5ae6 _ZThn60_N30CoreReadStreamFromCFReadStream16_streamImpl_OpenEP13CFStreamErrorPh + 34 9 CFNetwork 0x026d1112 _ZN14CoreStreamBase21_streamInterface_OpenEv + 72 10 CFNetwork 0x026f2c34_ZN17HTTPNetConnection19prepareTransmissionEP17HTTPNetStreamInfoP17__CoreWriteStream + 1614 11 CFNetwork 0x026f2063 _ZN17HTTPNetConnection19requestStateChangedEPvN13NetConnection5StateEP13CFStreamError + 415 12 CFNetwork 0x026f21fd _ZN13NetConnection18scheduleNewRequestEP13_CFNetRequestS1_h + 293 13 CFNetwork 0x026f1da4 _ZN13NetConnection7enqueueEPvh + 538 14 CFNetwork 0x026f1b26 _ZN17HTTPNetStreamInfo16_streamImpl_OpenEP13CFStreamErrorPh + 104 15 CFNetwork 0x02756846 _ZThn60_N17HTTPNetStreamInfo16_streamImpl_OpenEP13CFStreamErrorPh + 34 16 CFNetwork 0x026d1112 _ZN14CoreStreamBase21_streamInterface_OpenEv + 72 17 CFNetwork0x026f1315 _ZN12HTTPProtocol10openStreamEv + 267 18 CFNetwork 0x0276498c _ZN12HTTPProtocol26useNetConnectionForRequestEP13NetConnectionP15__CFHTTPMessageh + 1550 19 CFNetwork 0x026f05d8 _ZN24HTTPConnectionCacheEntry28dispatchConnectionToProtocolEP13NetConnectionP12HTTPProtocolP18HTTPRequestMessageh + 284 20 CFNetwork 0x026f03b9 _ZN24HTTPConnectionCacheEntry34notifyNextProtocolOfOpenConnectionEP13NetConnectionh + 349 21 CFNetwork 0x026ed71d _ZN24HTTPConnectionCacheEntry25enqueueRequestForProtocolEP12HTTPProtocolP15__CFHTTPMessage + 637 22 CFNetwork 0x026ed0db _ZN19HTTPConnectionCache34_onqueue_enqueueRequestForProtocolEP12HTTPProtocolP15__CFHTTPMessage + 185 23 CFNetwork0x0276a897 ___ZN19HTTPConnectionCache25enqueueRequestForProtocolEP12HTTPProtocolP15__CFHTTPMessage_block_invoke + 35 24 CoreFoundation 0x0197ac69 CFArrayApplyFunction + 57 25 CFNetwork 0x026e8441 _ZN19RunloopBlockContext7performEv + 155 26 CFNetwork 0x027ca3f4 _ZThn16_N19RunloopBlockContext24multiplexerClientPerformEv + 20 27 CFNetwork 0x026e8257 _ZN17MultiplexerSource7performEv + 299 28 CFNetwork 0x026e806c _ZN17MultiplexerSource8_performEPv + 76 29 CoreFoundation 0x0196277f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION___ZN19HTTPConnectionCache25enqueueRequestForProtocolEP12HTTPProtocolP15__CFHTTPMessage_block_invoke + 35 24 CoreFoundation 0x0197ac69 CFArrayApplyFunction + 57 25 CFNetwork 0x026e8441 _ZN19RunloopBlockContext7performEv + 155 26 CFNetwork 0x027ca3f4 _ZThn16_N19RunloopBlockContext24multiplexerClientPerformEv + 20 27 CFNetwork 0x026e8257 _ZN17MultiplexerSource7performEv + 299 28 CFNetwork 0x026e806c _ZN17MultiplexerSource8_performEPv + 76 29 CoreFoundation 0x0196277f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION___ZN19HTTPConnectionCache25enqueueRequestForProtocolEP12HTTPProtocolP15__CFHTTPMessage_block_invoke + 35 24 CoreFoundation 0x0197ac69 CFArrayApplyFunction + 57 25 CFNetwork 0x026e8441 _ZN19RunloopBlockContext7performEv + 155 26 CFNetwork 0x027ca3f4 _ZThn16_N19RunloopBlockContext24multiplexerClientPerformEv + 20 27 CFNetwork 0x026e8257 _ZN17MultiplexerSource7performEv + 299 28 CFNetwork 0x026e806c _ZN17MultiplexerSource8_performEPv + 76 29 CoreFoundation 0x0196277f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION0x026e8441 _ZN19RunloopBlockContext7performEv + 155 26 CFNetwork 0x027ca3f4 _ZThn16_N19RunloopBlockContext24multiplexerClientPerformEv + 20 27 CFNetwork 0x026e8257 _ZN17MultiplexerSource7performEv + 299 28 CFNetwork 0x026e806c _ZN17MultiplexerSource8_performEPv + 76 29 CoreFoundation 0x0196277f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION0x026e8441 _ZN19RunloopBlockContext7performEv + 155 26 CFNetwork 0x027ca3f4 _ZThn16_N19RunloopBlockContext24multiplexerClientPerformEv + 20 27 CFNetwork 0x026e8257 _ZN17MultiplexerSource7performEv + 299 28 CFNetwork 0x026e806c _ZN17MultiplexerSource8_performEPv + 76 29 CoreFoundation 0x0196277f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION核心基础 0x0196277f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION核心基础 0x0196277f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION+ 15 30 CoreFoundation 0x0196210b CFRunLoopDoSources0 + 235 31 CoreFoundation 0x0197f1ae __CFRunLoopRun + 910 32 CoreFoundation 0x0197e9d3 CFRunLoopRunSpecific + 467 33 CoreFoundation 0x0197e7eb CFRunLoopRunInMode + 123 34 Foundation 0x01353ece +[NSURLConnection(Loader) _resourceLoadLoop:] + 381 35 Foundation 0x013afa07 -[NSThread main] + 76 36 基础 0x013af966 __NSThread__main+ 1275 37 libsystem_pthread.dylib 0x0241d5fb _pthread_body + 144 38 libsystem_pthread.dylib 0x0241d485 _pthread_struct_init + 0 39 libsystem_pthread.dylib 0x02422cf2 thread_start + 34)libc++abi.dylib:以 NSException 类型的未捕获异常终止

知道我的错误是什么......!?

0 投票
1 回答
700 浏览

ios - NSURLSession 恢复上传视频

我正在使用 NSURLSession 上传视频,现在我的视频已成功上传。但是一旦wifi连接关闭,下面的委托方法就会立即执行。

WIFI连接恢复后如何恢复上传?

0 投票
1 回答
1196 浏览

ios - 使用 NSURLSession 在后台上传文件时无法保持恒定速度

我正在尝试使用 AFURLSessionManager 在后台将大约 100 张图像上传到 S3,小批量 10 个,就像这里正在做的那样 -管理后台 NSURLSession 中的活动任务的数量

我正在使用共享的 NSURLSession 并在完成某些任务时根据更多任务添加任务。每个文件的平均大小约为 1.6 MB,每个任务队列保证运行的任务数为 5

这是我添加任务的方法:(也可作为更易于阅读的要点

这就是我对代表所做的

这是添加更多任务的代码

我一直在前台模式和后台模式下运行 100 个文件的测试。在Foreground模式下,文件以一致、稳定、恒定的速度上传,前3分钟完成90个文件,其余10个文件在20秒内完成。

当我在后台模式下运行应用程序时,我希望它上传前 90 个文件的速度与在 3 分钟的前台窗口中一样快,然后放慢速度……但事实并非如此。在后台模式下,它会在第一分钟上传 15 个文件,然后开始减速……很多。它以越来越慢的间隔开始上传 8 个文件批次:1 分钟、3 分钟、5 分钟、10 分钟,现在是 17 分钟。我们在 46 分钟内有 65 个文件。

有没有办法让它保持快速至少拳头 3 分钟,或者在后台保持一致的速度?

更新:根据 Clay 的评论,我从 AFURLSessionManager 切换回 NSURLSession,因为正如他所指出的,使用基于块的回调是 NSURLSession 的一项极具风险的业务。此外,我还使用了 HTTPMaximumConnectionsPerHost 并将其设置为 10 左右——这给出了更好的结果,但与我想要的结果相去甚远。

0 投票
1 回答
365 浏览

ios7 - 使用 NSURLSession 在 iPad 后台上传照片

使用 NSURLSessionUploadTask 从资产库上传多张照片的最佳方法是什么?

我现在正在使用 NSURLSession 后台上传。这是我正在使用的代码:

这是一个好方法吗?我面临的一个问题是我无法正确更新进度条,我打算在其中显示整个上传过程的进度。我正在使用以下代码:

正如预期的那样,进度更新根本不合适:)

请指出一个更好的方法,因为我发现很难找到合适的教程来处理上传。虽然有很多解释后台下载。

0 投票
1 回答
407 浏览

ios - 不确定在后台使用 NSURLSession 时我的应用程序对象会发生什么 - 我的应用程序处于什么状态?

更多的一般性问题 - 我不明白NSURLSession在“”中使用它时的工作原理background session mode。我将提供一些简单的人为示例代码。

我有一个保存对象的数据库 - 这样可以将部分数据上传到远程服务器。重要的是要知道上传了哪些数据/对象,以便准确地向用户显示信息。能够在后台任务中上传到服务器也很重要,因为该应用程序可以随时终止。

例如一个简单的个人资料图片对象:

现在假设我想将个人资料图片上传到远程服务器 - 我可以执行以下操作:

现在我想在我的代码中的其他地方上传个人资料图片 - 如果成功更新 UI 和发生此操作的数据库:

现在很明显,如果我的应用程序正在运行,那么这个“ ProfilePicture”对象已成功上传并且一切都很好——数据库对象有自己的内部工作方式,包括数据结构/缓存等等。所有可能存在的回调都会被维护,并且应用程序状态很简单。

但我不清楚如果应用程序在上传过程中的某个时刻“死机”会发生什么。似乎任何回调/通知都已失效。根据 API 文档,上传由单独的进程处理。因此上传将继续,我的应用程序将在未来某个时候被唤醒以处理完成。但是对象“ aNewProfilePicture”此时不存在,所有回调/对象都消失了。我不明白此时存在什么上下文。我应该如何确保我的数据库和 UI 的一致性(例如更新该successfullyUploaded用户的“”属性)?我是否需要重新处理所有触及 DB 或 UI 的内容以与新 API 对应并在无上下文环境中工作?