5

iOS Background FETCH n Background TRANSFER を使用してアプリを更新します。

大量のファイルの大規模なダウンロードの一部として MP4 をダウンロードすると、ダウンロードが突然停止してエラーが発生することがあります。

「クライアントは応答全体を受信する前に接続を閉じました」

httpコードはまだ200です。

企業の携帯電話アカウントのためにデータに制限がなく、iPad に単一のアプリがあるため、管理者は、クリーン インストールで 20/30 を超える大量のデータとファイル数をダウンロードすることを望んでいます。それらは、毎日発行される企業のビデオ/ PDF です。

NSURLSession を作成しました

NSURLSession * backgroundSession_ = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier]

次に、mp4 または PDF への URL ごとに、NSURLSession から NSURLSessionDownloadTask を作成します。

NSURLSessionDownloadTask * downloadTask_ = [backgroundSession_ downloadTaskWithURL:url_];

各ダウンロード タスクで起動を再開します。すべてが返されたら NSURLSession が完了し、アプリが更新されたことを通知でユーザーに伝えます。

Mac で CHARLES PROXY を使用してダウンロードを監視しています。多くのファイルがあるため、しばらく時間がかかります。また、映画がストリーミングされているように見えるため、遅くなる可能性があることに気付きました. 通常、ダウンロードされたものをチェックし、最新のもののみをダウンロードしますが、多くのダウンロードを行うと、クリーン インストールと言うと、mp4 へのストリームが頻繁に停止することに気付きました。彼らは200コードを持っていますが、メッセージがあります

「クライアントは応答全体を受信する前に接続を閉じました」

NSURLSession の完了が停止し、同期が一種のハング状態になる可能性があるため、これを引き起こす可能性のある考えはありません。

画像: OK ダウンロード: ムービー ストリームとディスクに保存: 200: 完了

画像:OK ダウンロード: ムービー ストリームとディスクに保存: 200: 完了

画像: ダウンロードが突然停止する:

画像: ダウンロードが突然停止する: 画像: ダウンロードが突然停止する:

任意のアイデア: 私はバックグラウンド フェッチを使用しているため、メッセージ内のクライアントが iOS8 なのか私のアプリなのかわかりません。各 downloadtask が返された後、ドキュメントで tmp ファイルを mp4 にコピーして呼び出します

[session finishTasksAndInvalidate];

これらのダウンロード タスクの一部が失敗すると、セッションが終了せず、スタックすることに気付きます。別のフェッチを行うと、これらの古いダウンロード タスクと古いセッションがすべて取得されます。

4

2 に答える 2

0

サーバー メイトに content-type を video/mpeg4 に変更するよう依頼するか、リクエスト タイプを GET から POST に変更することができます。

于 2017-06-28T13:44:03.700 に答える