問題タブ [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.
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 クラスを使用します。このクラスはアップロードをストリーミングします。ストリームはファイルではないため、バックグラウンド セッションでは使用できません。
backgroundSessionConfiguration を使用している AFHTTPSessionManager で実行できるマルチパートボディを持つ NSURLSessionUploadTask を持つことは可能ですか?
以下のサンプルコードを参照してください。
ios8 - NSURLSessionUploadTask が ios8 Beta3 の再開に応答しない (デバイスのみ)
バックグラウンド クライアントを使用してでresume
メソッドを送信すると、プロセスが開始されません。シミュレーターでは再現できず、デバイスでのみ、8.0 でのみ再現できます。NSURLSessionUploadTask
NSURLSessionConfiguration:backgroundSessionConfiguration:
これは任意のバックグラウンド タスクに関する問題ではなく、resume
フォアグラウンドで実行され、文字通り何も起こりません。委任のコールバック、進行状況、クラッシュ、ネットワーク アクティビティなどはありません。
レーダーを提出しました:://17703428
ios - iOS NSURLSessionUploadTask 応答データ
NSURLSessionUploadTask の実装に成功し、バックグラウンドとフォアグラウンドの両方で動作します。しかし、応答データを読み取るときに問題があります。
これらは、上記の 2 つの NSLog の出力です
1 データ: {"success":true,"data":[{"uuid":"8BE7DF37-9DA1-44D2-B48C-D012F699A9B1","id":266626},{"uuid":"3406D865-1A41-4FC6 -BA0B-0638F17757CC","id":266656}],"エラー":[],"entityName":"LeadProfile"} END DATA
最後のデータ: {"success":true,"data":[{"uuid":"8BE7DF37-9DA1-44D2-B48C-D012F699A9B1","id":266626},{"uuid":"3406D865-1A41 -4FC6-BA0B-0638F17757CC","id":266656}],"エラー":[],"entityName":"LeadProfile"}{"成功":true,"データ":[{"uuid":"8BE7DF37 -9DA1-44D2-B48C-D012F699A9B1","id":266626},{"uuid":"3406D865-1A41-4FC6-BA0B-0638F17757CC","id":266656}],"エラー":[]," entityName":"LeadProfile"} END DATA
1 つのアップロード タスクに対して 2 つの異なる応答が返されるのはなぜでしょうか。場所ごとにどのようself.responseData
に異なるのでしょうか?
これは、Apple Web サイトに記載されている理由によるものだと思う人はいますか? (NSData オブジェクトは多くの場合、多数の異なるデータ オブジェクトから結合されるため、可能な場合は常に、bytes メソッド (NSData オブジェクトを 1 つのメモリ ブロックにフラット化する) を使用するのではなく、NSData の enumerateByteRangesUsingBlock: メソッドを使用してデータを反復処理します。 apple.com
ios - NSURLSessionUploadTask がファイル全体を送信しない
NSURLSessionUploadTask
カスタム REST サービスにファイルを送信しようとして問題が発生しました。問題は、ファイルが任意のサイズまで転送されたように見え、タスクがエラーなしで停止することです ( URLSession:task:didCompleteWithError:
gets がerror
set toで呼び出されますnil
)。
転送する必要があるファイルのサイズはほぼ 10 MB で、小さなファイルが正しく転送される場合があることがわかりました。
タスクの作成に使用しているコードは次のとおりです。
サーバーがリクエストを正しく解釈するには、いくつかのヘッダーを指定する必要があります。length
変数は、送信されるファイルの有効サイズです。
ここで何が起こっているかについて何か考えはありますか?
ありがとう。
php - NSURLSession uploadTaskWithRequest:fromData: が php サーバーへのアップロードに失敗するのはなぜですか?
PHPコードは正常に動作します。同じサーバー上の html フォームからファイルをアップロードしました。アップロードされたファイルは 40K から 2.0M の範囲だったので、サイズではありません。PHP 5.3 を実行しているサーバーでファイルのアップロードが有効になっている
このような多くの投稿を見つけました (まだ回答なし): https://stackoverflow.com/questions/19710388/using-nsurlsession-to-upload-an-image。
これは、fromData: NSURLSession の代わりに uploadTaskWithRequest:fromFile: を使用して、アップロードが機能していることを確認します
これは、uploadTaskWithRequest ではなく NSURLSessionDataTask です: NSURLSession でデータを受信していません
そして、uploadTaskWithRequest:fromData: 単に機能しないと思われるいくつかの投稿: NSURLSession: uploading assets with background transfer asynchronous upload with NSURLSession will not work but synchronous NSURLConnection does and Upload image from iOS to PHP
HTTP コードを返すようにアプリを作成し、コード 200 を取得しました。アップロード後、サーバーの error_log ファイルには何もありません。すべてが正常に機能しているように見えますが、何が起こっても、ファイルはサーバーに書き込まれません。何がうまくいかないのかを見つけるために他に何ができるか考えていますか?
phpコードは次のとおりです。
iOSコードは次のとおりです。
そのフォルダーには 777 のアクセス許可があります。私が言ったように、私はアップロードして、同じphpスクリプトからhtmlフォームを介してそのフォルダーに書き込むことができました。
totalResponse は、http エラー コードの場合は 200、count=0 であり、php ダンプの場合は array(0) {} です。
アプリ内のサーバーからの応答の画像を次に示します。
アップロードされた一時ファイルをエコーした後、次の行を追加しました。
しかし、私はこれだけを得ました:
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:format:] + 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_FUNCTIONCoreFoundation 0x0196277f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTIONCoreFoundation 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 のキャッチされない例外で終了する
ここで私の間違いは何ですか..!?
ios - NSURLSession を使用してバックグラウンドでファイルをアップロードしている間、一定の速度を維持できません
ここで行われているように、AFURLSessionManager を使用してバックグラウンドで S3 に約 100 個の画像を 10 個の小さなバッチでアップロードしようとしています -バックグラウンド NSURLSession でアクティブなタスクの数を管理します
私は共有 NSURLSession を使用しており、いくつかのタスクが完了したときに、これに応じてタスクを追加しています。各ファイルの平均サイズは約 1.6 MB で、タスク キューごとに実行が保証されているタスクの数は 5 です。
タスクを追加するための私の方法は次のとおりです: (読みやすい要点としても利用可能)
そして、これは私がデリゲートで行ったことです
タスクを追加するコードは次のとおりです
フォアグラウンド モードとバックグラウンド モードで 100 個のファイルを使用してテストを実行しています。フォアグラウンド モードでは、一貫した安定した一定の速度でファイルをアップロードし、最初の 3 分間で 90 個のファイルを完了し、残りの 10 個のファイルを 20 秒で完了します。
アプリをバックグラウンド モードで実行すると、最初の 90 個のファイルが 3 分間のフォアグラウンド ウィンドウと同じ速度でアップロードされ、その後速度が低下すると予想されますが、そうではありません。バックグラウンド モードでは、最初の 1 分間に 15 個のファイルをアップロードし、その後速度が低下し始めます。1 分、3 分、5 分、10 分、そして今は 17 分と、徐々に遅い間隔で 8 つのファイル バッチでアップロードを開始します。46 分で 65 ファイルになりました。
少なくとも最初の 3 分間は速度を維持するか、バックグラウンドで一定の速度を維持する方法はありますか?
更新:ここで Clay からのコメントに続いて、私は AFURLSessionManager から NSURLSession に切り替えました。なぜなら、彼が指摘するように、ブロックベースのコールバックを使用することは NSURLSession で非常に危険なビジネスだからです。さらに、私は HTTPMaximumConnectionsPerHost で遊んで、これを約 10 に設定しました。これにより、より良い結果が得られましたが、私が望むものにはほど遠いものでした。