Web サービスを使用して、アプリから Web サーバーに大きなファイルをアップロードしようとしています。
ビデオをNSData
インスタンスに読み込み、それを base64 でエンコードされた文字列に変換しています。次に、文字列を webservice に渡します。アップロード中にビデオの品質を低くしてみましたが、それでもサーバーに 5 分を超えるビデオをアップロードできず、サーバーが応答を停止します。
サーバーからエンコードされたデータを確認すると、完全に受信されていません。ファイルのサイズが大きすぎて、正しく送信されていないと思います。以下は私のコードの一部です。多くの投稿で言及されている多くのオプションを試しましたが、クライアントの要件に従ってビデオを適切にアップロードできません。4 ~ 5 分の動画を低品質で正常にアップロードできましたが、大きな動画をアップロードできませんでした。私を助けてください。
NSData *videoData = [NSData dataWithContentsOfURL:urlVideo];
pictureDataString = [videoData base64Encoding];
----other code
xml = [xml stringByAppendingString:[NSString stringWithFormat:@"<BinaryData>%@</BinaryData>",pictureDataString]];
...other code
xml 全体を生成した後、次のコードを使用しています。
url = [NSURL URLWithString:@UploadMemory];
serviceRequest = [ASIHTTPRequest requestWithURL:url];
[serviceRequest setShouldStreamPostDataFromDisk:YES];
[serviceRequest addRequestHeader:@"Content-Type" value:@"text/xml"];
[serviceRequest appendPostData:[xml dataUsingEncoding:NSUTF8StringEncoding]];
[serviceRequest setTimeOutSeconds:86400];
[serviceRequest setDelegate:self];
[serviceRequest startAsynchronous];
インスタンスを複数の部分に分割し、NSData
個別の XML ファイルをサーバーに送信して、時間を節約し、大きなビデオ ファイルをサーバーにアップロードできるようにしましたが、まだうまくいきません。
データをbase64にエンコードするのに時間がかかるため、複数のxmlをサーバーに送信するためにエンコードされた文字列を分割できません。これを行うためのより良い方法を提案してください。
iOSでデータファイルをバイナリ形式で読み取る方法を誰かが教えてくれれば、これに対してもう1つのオプションがあります。これにより、ビデオファイルをバイナリ分割で読み取っNSData
てから、それをbase64エンコーディングに変換して動作させることができます。
どうもありがとう ....