0

複数の画像をサーバーにアップロードするのに問題があります。アップロードに次のコードを使用しています。

-(void)upload {
 NSString *path=[NSString stringWithFormat:@"%@.php",webserviceURL];
 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:path]];
 [request addPostValue:@"306" forKey:@"id"];

 for (int i= 0; i<[imageArray count]; i++) {
    NSData *imgData = UIImageJPEGRepresentation([imageArray objectAtIndex:i],1.0);
    NSDate *date....

     .....

    NSLog(@"dateString");//for getting different file name..

    [request addData:imgData withFileName:[NSString stringWithFormat:@"%@.jpg",dateString] 
    andContentType:@"image/jpeg" forKey:@"image"];
  }

 [request setDelegate:self]; 
 [request startAsynchronous];
}

このコードを使用すると、画像を 1 つだけアップロードできます。同じキーを使用して複数の画像をアップロードするにはどうすればよいですか?

4

1 に答える 1

3

リクエスト: ASIFormDataRequest は非常に古く、作成者によって更新されていません。AFNetworkingに切り替える必要があります。

この方法でファイルを受信するためのバックエンドとして PHP を使用している場合は、ファイルの配列を送信できるはずです。

NSData *imageToUpload = UIImageJPEGRepresentation([UIImage imageNamed:@"profile-image-placeholder"], 10);
AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://www.imthi.com"]];

NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"/info.php" parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
    [formData appendPartWithFileData: imageToUpload name:@"image[0]" fileName:@"temp.jpeg" mimeType:@"image/jpeg"];
    [formData appendPartWithFileData: imageToUpload name:@"image[1]" fileName:@"temp.jpeg" mimeType:@"image/jpeg"];
    [formData appendPartWithFileData: imageToUpload name:@"image[2]" 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);
} failure:^(AFHTTPRequestOperation * _operation, NSError *error) {
    if([_operation.response statusCode] == 403){
        NSLog(@"Upload Failed");
        return;
    }
}];
[operation start];

トリックは、さらにファイルを追加するためのキーとして image[0]、image 1、image[2] などを使用することです。コードを変更してみてください。現在のライブラリでも動作するはずです。

[request addData:imgData withFileName:[NSString stringWithFormat:@"%@.jpg",dateString] andContentType:@"image/jpeg" forKey:[NSString stringWithFormat:@"image[%d]",i]];

PHP では、次のようなファイルを受け取る必要があります。

(
[image] => Array
    (
        [name] => Array
            (
                [0] => temp.jpeg
                [1] => temp.jpeg
                [2] => temp.jpeg
            )

        [type] => Array
            (
                [0] => image/jpeg
                [1] => image/jpeg
                [2] => image/jpeg
            )

        [tmp_name] => Array
            (
                [0] => /tmp/php4XsVR8
                [1] => /tmp/phpDBPzVO
                [2] => /tmp/phpu26eZu
            )

        [error] => Array
            (
                [0] => 0
                [1] => 0
                [2] => 0
            )

        [size] => Array
            (
                [0] => 2207
                [1] => 2207
                [2] => 2207
            )

    )

)

これで問題が解決することを願っています.. :-)

于 2013-02-13T08:00:36.833 に答える