NSURLSession
を使用してAsset Libraryからサーバーに写真をアップロードする際にいくつか問題があります。NSURLセッションとストリームをバックグラウンドでアップロード
最初にNSURLSession
はストリーミングアップロードをサポートしていません。 Appleのマニュアルは、バックグラウンドセッションに対してのみuploadTaskWithRequest:fromFile:
の使用に関するあらゆる情報が含まれていないので、本当に奇妙だ
Terminating app due to uncaught exception 'NSGenericException', reason: 'Upload tasks in background sessions must be from a file'
:
@property (nonatomic, strong) NSURLSession *uploadSession;
...
_uploadSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration
backgroundSessionConfiguration:kUploadBackgroundURLSessionIdentifier] delegate:self delegateQueue:nil];
...
NSURLSessionUploadTask *task = [self.uploadSession uploadTaskWithStreamedRequest:URLRequest];
これは例外である:それを使用しようとしたとき、私は例外が発生しました。本当に巨大な動画ファイルをアセットライブラリからアップロードしたいのですが?以前にtmpディレクトリに保存する必要がありますか?
唯一の理由は、とにかくuploadTaskWithRequest:fromFile:
を使用するように見えますか?しかし、私は、アップロードプロセスが中断され、次の部分をバックグラウンドでアップロードし始めると、サーバーがファイルの内容を知ることがどのようにしてアップロードされているのかという質問がありますか?
私はそれを何かするべきでしょうか?以前に開始されたファイルの一部をアップロードし続ける場合は、以前はContent-RangeをURL要求で使用しました。今はできません - アップロードタスクを作成する前にURLリクエストを作成して、NSURLSession
のように自動的にそのようなことをする必要がありますか?
誰かが既にそういったことをしていますか?おかげ
ドキュメントを読むと、バックグラウンド用にファイルを用意する必要がありました。あなたの質問が分からない - ファイルが部分的にしかアップロードされておらず、サービスがどれくらい受け取ったのかがわかっている場合は、ファイルをトリムして未送信部分を再送することができます。私はこれをやっている経験はありませんが、実行可能に思えます。 –
はい、すべて動作可能ですが、資産ライブラリから膨大な動画をアップロードしたい場合は、アプリケーションフォルダに十分な領域があればそれをコピーしてから、コピーを開始してから時間をかけなければならないという問題があります何が既にアップロードされているかをチェックし、ファイルをトリムし、新しいリクエストを開始する。しかし、Appleのドキュメントは、各ファイルごとに1つのタスクを作成する必要があることを伝えています。 – gN0Me
私は資産ライブラリの経験がありません。ビデオを取得するために使用するフレームワークやクラスは何ですか? –