3

写真を撮り、jpeg品質のサイズ(10〜100%)を調整してから、ASIFormDataRequest(ASIHTTPRequest実装の一部)を使用してサーバーに送信できるアプリがあります。これはネットワーク接続上では問題なく動作しますが、セルラー ネットワーク上では、失敗する前に (品質が 10% であっても) 5 ~ 10 分間、画像ポスト データの送信を試みているように見えます。

これを Twitter および Facebook アプリが提供する画像のアップロード (30 秒から 1 分ほどかかる) と比較すると、これは正確には理想的ではありません。データ転送を高速化する方法、または問題がどこにあるかを正確に確認できるように監視する方法について、誰かアドバイスをいただけないでしょうか。

今夜、Mac ラップトップに戻ったら、私が何をしているかを正確に示すコード スニペットを投稿します。

編集: コード スニペットは次のとおりです。

NSURL *url = [NSURL URLWithString:@"...upload.php"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
NSString *fileName = [NSString stringWithFormat:@"%d", time];
...
float compressionRate = [userAccountView getCompressionRate];
NSLog(@"Compression rate: %.1f", compressionRate);
NSData *imageData = UIImageJPEGRepresentation(imageForView, compressionRate);
[request setData:imageData withFileName:fileName andContentType:@"image/jpeg" forKey:@"userfile"];
[request setDelegate:self];
[request startAsynchronous];

.. code コメントは、ビューの上に「アップロード」イメージを貼り付ける場所です。呼び出しを非同期ではなく同期にすることができると思いますが、パフォーマンスが向上すると思いますか? 後の段階で、アップロード中にユーザーが他のビットを実行できるようにしたい場合に備えて、そのままにしておきました。

どんなアドバイスも素晴らしいでしょう:)

ありがとう、

ダン

編集:

ジェシー、コメントありがとう - [request setUploadProcessDelegate:self] を追加し、送信されているデータを監視するために必要なメソッドを入れたところ、すべて正常に送信されているように見えました。

JosephH - 提案どおり「[ASIHTTPRequest setShouldThrottleBandwidthForWWAN:YES]」を追加し、「set_time_limit(0);」も追加しました。PHPアップロードスクリプトに(タイムアウトの場合)、データはセルラーネットワークを介して送信および取得されているようです。ファイル圧縮などをいじって、最高の品質に最適なものを見つけています。ATM 0.3 はかなり高品質のようで、およそ 30 秒ほどで転送されます。これが私が探していたものです!

0.0-1.0 ではなく 10-100 を使用していたため、圧縮率の設定も間違っていたので、それも修正しました。

私の問題を解決するためにあなたの迅速な助けをありがとう!!

4

1 に答える 1

1

最初にすべきことは、送信しているデータのサイズを確認することだと思います。

 NSLog(@"imageData size = %d", [imageData length]);

NSLog は、compressionRate が 10% に対して 0.1 に設定されていることを正しく示していますか?

ASIHTTPRequest には、有効にできる多くのデバッグ ロギングもあります。ASIHTTPRequestConfig.h を参照してください。すべてを 0 から 1 に変更するだけです。関心のあるものは何も明らかにならないかもしれませんが、一見の価値があることは確かです。

お電話[ASIHTTPRequest setShouldThrottleBandwidthForWWAN:YES]ですか?

失敗した場合、どのように失敗するのか、エラーは何か、サーバーのログには何が表示されるのか?

(余分なものを見つけた場合は、質問に編集してコメントを投稿してください。もう一度調べます)

于 2010-08-25T18:42:09.277 に答える