1

現在、iDeviceからサーバーAPIに大きなファイルをアップロードする必要があります。このために、ASIHTTPRequestライブラリを使用しようとしています。これは、キューに入れられたチャンクの大きなファイルのアップロードを自動的にサポートするためです(これまでは、ファイル全体のバイトを含むNSDataインスタンスを一度に作成し、これをPOSTメッセージに添付していましたが、これにより、 RAMの使用量が多すぎるために、アプリケーションが大きなファイルでクラッシュする)。

問題は、ファイルをアップロードしてHTTP Postメッセージにファイルを追加する必要がある場合、次の構文を使用する必要があることです。

[theUploadRequest setFile:@"" forKey:@"videoupload"];

setFileには、文字列形式のファイルパスが必要です。私が現在抱えている問題は、アプリケーションのサンドボックスにないファイルからファイルパスを取得することが許可されていないように見えることです。アプリケーションにはないが、標準のカメラロールではファイルの外にあるファイルをアップロードする必要があるため。

このクイックテストを実行して、NSDataオブジェクトを作成し、カメラロール内のファイルからのデータを入力して、次のようにパスを指定できるかどうかを確認しました。

NSData *testData = [NSData dataWithContentsOfURL:theContent.defaultRepresentation.url];
NSLog(@"THE SIZE OF THE TEST DATA: %i", testData.length);

「theContent」はALAssetのインスタンスであり、カメラロールから取得されたファイルであることに注意してください。この結果、長さは0になります。これは、単純にそれを実行できないことを意味していると思います。

これを回避する方法はありますか?または、どういうわけかビデオファイルをアプリケーションのサンドボックスにインポートする必要がありますか?

4

2 に答える 2

2

それで、私が正しく理解しているなら、あなたはカメラロールから直接ものをアップロードしたいですか?ドキュメントに基づいて、必要な重要なコードは次のとおりです。

NSString *filePath = [[info objectForKey:
                UIImagePickerControllerMediaURL] path];

情報ディクショナリは、メディアピッカーの代理人に渡されます。

- (void) imagePickerController: (UIImagePickerController *) picker
        didFinishPickingMediaWithInfo: (NSDictionary *) info;

filePathこれで、への呼び出しでそれを使用できるようになりますsetFile

于 2012-04-12T08:58:12.447 に答える
1

ここを見てください。おそらくあなたは何か役に立つものを見つけるでしょう。

お役に立てれば。

編集:もっと簡単なものについては、この回答に投稿されたコードのビットを使用できます

特に大きなファイルの場合は、アップロードする前にファイルをどこかにコピーする必要があることを意味します。

于 2012-04-12T09:17:34.690 に答える