1

次のコードを使用して、iOSアプリからサーバーにTESTTESTという名前のjpgをアップロードできました

- (void)saveImageToServer {
    NSData *imageData = UIImageJPEGRepresentation(_profileImage, 90);
    //NSString *urlString = @"URL 1/upload.php";
    NSString *urlString = @"URL 2 /upload.php";
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];

    NSString *boundary = @"_187934598797439873422234";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request setValue:contentType forHTTPHeaderField: @"Content-Type"];
    [request setValue:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" forHTTPHeaderField:@"Accept"];
    [request setValue:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14" forHTTPHeaderField:@"User-Agent"];
    [request setValue:@"http://google.com" forHTTPHeaderField:@"Origin"];

    NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"picture\"; filename=\"%@.jpg\"\r\n", @"TESTTEST"] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[NSData dataWithData:imageData]];

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];


    [request setHTTPBody:body];
    [request addValue:[NSString stringWithFormat:@"%d", [body length]] forHTTPHeaderField:@"Content-Length"];


    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
    NSLog(@"%@", returnString);
}

これは少し前のことで、そのフォルダの権限を に設定したことを思い出しました777。今、同じコードを使用して、同じphpファイルを使用して別のドメイン(URL 2)に画像をアップロードしていますが、失敗しました。そのフォルダの権限も設定しました777。また、最初のドメインでこの obj-c および php コードをテストしましたが、動作します。

どこから問題を探し始めるか教えてもらえますか? 最初の URL で正常に動作するため、サーバーに関連するものである必要があります。デバッグに役立つように PHP で何かを印刷する方法はありますか?

これが私のphpファイルです。それは本当に基本的なもので、テスト目的でサーバー上にそのイメージが欲しいだけです:

<?php
    //$target_path "./uploads/profile_image/"
    $target_path = "./";  // Testing

    $target_path = $target_path . basename( $_FILES['picture']['name']);  

    if(move_uploaded_file($_FILES['picture']['tmp_name'], $target_path)) {  
    echo "The file ".  basename( $_FILES['picture']['name'])." has been uploaded";  
    } else{  
    echo "There was an error uploading the file, please try again!";  
    } 
 ?>
4

1 に答える 1

0

私は2つのことをします:

  1. echo$_GET/$_POST/$_FILES を調べて、すべてが問題ないかどうかを確認するために、php ファイルにいくつかの es を追加します。また、解決したrealpath内容を確認するためにも使用します。target_path

  2. そのNSError引数を使用しsendSynchronousRequestて、リクエストのクライアント側で何が起こるかを確認します。

         NSError* error = nil;
         NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
         NSLog(@"%@",[error localizedDescription]);
    
于 2013-10-31T09:20:12.483 に答える