0

php スクリプトに画像をアップロードしようとすると、ASIHTTPRequest ライブラリを使用すると奇妙な問題が発生します。ASIHTTPRequest を正しく実装しました。php スクリプトは iphone シミュレーターから POST データを受信しますが、テスト セットの一部の画像に対してのみです。POSTを通過しない画像は他にもあります。

すべての画像は Facebook から取得したもので、jpg または png 形式です。両方のタイプの画像でコードをテストしましたが、iPhone アプリケーションで PNGRepresentation メソッドを使用して画像を NSData に変換するため、問題にはなりません。画像のサイズもテストしましたが、これは問題ではありません (600x600 から 1200x1200 の範囲)。

ASIHTTPRequest を壊す画像は私には特別なものではないように思われ、バグを特定するのに苦労しています。以下は私の実装の一部です:

iPhone の実装:

[RegisterRequest setData:profilePicturePNG withFileName:filename andContentType:@"image/png" forKey:@"profilePicture"];
[RegisterRequest addRequestHeader:@"Content-Type" value:@"image/png"];
[RegisterRequest setDelegate:self];
[RegisterRequest startAsynchronous];

PHP の実装:

echo "Upload: " . $_FILES["profilePicture"]["name"] . "<br>";
echo "Type: " . $_FILES["profilePicture"]["type"] . "<br>";
echo "Size: " . ($_FILES["profilePicture"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["profilePicture"]["tmp_name"] . "<br>";

このテストでは、PHP 実装がファイル プロパティをエコーする必要があります。前述したように、ほとんどの画像でエコーが返ってきます。ただし、名前とタイプが通過せず、サイズが 0kb と報告されるイメージがいくつかあります。

助言がありますか?よろしくお願いします!

4

2 に答える 2

1

参考までに、ASIHTTPRequestは非推奨になりましたが、ここでAFNetworkingを使用して、ここから参照できます。 https://github.com/AFNetworking/AFNetworkingおよびこの例

-(IBAction)uploadButtonClicked:(id)sender{

NSData *imageToUpload = UIImageJPEGRepresentation(mainImageView.image, 90);

AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://www.THESERVER.com"]];

NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"/PROJECT/upload.php" parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
[formData appendPartWithFileData: imageToUpload name:@"file" fileName:@"temp.jpeg" mimeType:@"image/jpeg"];
}];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *response = [operation responseString];
NSLog(@"response: [%@]",response);
[MBProgressHUD hideHUDForView:self.view animated:YES];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[MBProgressHUD hideHUDForView:self.view animated:YES];
if([operation.response statusCode] == 403){
    NSLog(@"Upload Failed");
    return;
}
NSLog(@"error: %@", [operation error]);

}];

[operation start];
}
于 2013-01-11T06:54:51.257 に答える
1

画像のアップロードには ASIHTTPRequest を使用しないでください

 NSString *requestStr = [yourPHPSCriptURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
responseString = nil;

NSURL *requestUrl = [[NSURL alloc] initWithString:requestStr];

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:requestUrl];

[request setPostFormat:ASIMultipartFormDataPostFormat];
[request addPostValue:@".png" forKey:image_content_type];  //Use this if you want//
[request setShouldAttemptPersistentConnection:YES];
[request setData:yourPhotoData withFileName:@"user_image_byte.png" andContentType:@"image/png" forKey:@"user_image_byte"];

[request startSynchronous];

画像をバイトストリームとして送信し、後でasp.netで画像として変換します。お役に立てれば。

于 2013-01-11T06:45:35.543 に答える