私はメッセージングアプリを開発しており、ユーザーは画像をお互いに送信することもできます。私はASIFormDataRequest
でこれをやってことに成功し
ユーザーがAFNetworking
に移動する前に、私は、それらを並行して送る複数の画像(私は二番目を送信する前に私がアップロードを終了する最初のものを待たない)AFNetworkingで複数の画像を送信
を送信実際に2枚の画像を送信した場合、その両方が並行して送信され、他のユーザーに正常に配信されました。
AFNetworkingでこれを実行しようとすると、私は奇妙な動作をします。
私はUSER1すぎuser2の2枚の画像を送信された場合について説明しようとするでしょう:
- User1のイメージ1を送信する - すべてがOKに見えます>、私は、アップロードの進行状況を確認することができます。
- User1は画像2を送信します - >まだOKです。両方の画像のアップロードの進行状況を確認できます
- image1アップロードが完了しました - > user2はimage1とimage2の組み合わせのような壊れた画像を取得します。
- アップロードが終了した画像2 - > User2が画像2が正常に
これは私がイメージ
- (void)sendImageMsgWithPath:(NSString *)path
image:(UIImage *)image
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
progress:(void (^)(NSInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress
{
NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
// create the request
NSURLRequest *request = [[AppClient sharedClient] multipartFormRequestWithMethod:@"POST" path:path parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
{
[formData appendPartWithFileData:imageData name:@"image_name" fileName:@"image_name.jpg" mimeType:@"image/jpeg"];
}];
// create the operation
AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease];
// set progress block
[operation setUploadProgressBlock:progress];
//set completion blocks
[operation setCompletionBlockWithSuccess:success failure:failure];
// set it to work in background
[operation setShouldExecuteAsBackgroundTaskWithExpirationHandler:nil];
// add it to the operations queue
[[AppClient sharedClient] enqueueHTTPRequestOperation:operation];
}
を送信する方法で取得します***両方の画像のアップロードのためのパスは同じです:
path = @ "FrontEnd?cmd = sendimage & fromuserid = 3 & touserid = 1 &"
copleteのURLを作成するために、ベースURLに追加されます。
"http://somename.myftp.org:8080/web_proj/FrontEnd?cmd=sendimage&fromuserid=3&touserid=1"
@これは私が送信された画像である:
image1の
image2
壊れた画像
送信する画像ごとに別々のバッファを使用していることを確認してください。また、受信者が受信した画像ごとに別々のバッファを使用していることを確認してください。彼らはどこかで組み合わされているように聞こえる。最後に、3G/4G経由で送受信している場合、すべての画像を並行して送信することで、スループットの向上が得られない場合があります。最適なストリームの数を確認するためには、実験を行う必要があります。 – nielsbot
ASIHTTPRequestライブラリでこれを成功させるので、おそらくサーバーの問題ではありません。クライアント側のバッファについては、よく私は本当に私はちょうどAFNetworkingのAPIを使用しています、これを処理していない、わからないライブラリはそれを管理している場合か、私はそれを行う必要がある場合... – Eyal
はどのようにこれを処理していますサーバ側?受信した画像を同じファイルに書き込んでいる可能性があります。最初のファイルは上書きされます。もう1つは上書きされます。 – yonosoytu