0

画像を保存するために HTTP リクエストを実行しようとしています。PHPスクリプトがPOSTを処理します。手動で設定されたファイルの名前を受け取るようですが、ファイルにはサイズがなく、保存されません。

私が使用している Obj-C コードは次のとおりです。

    MyImage.image = [info objectForKey:UIImagePickerControllerOriginalImage];

    NSData *imageData = UIImageJPEGRepresentation(MyImage.image, 90);
    NSString *urlString = @"http://localhost/api/phptest.php";

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];

    NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];


    NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"ipodfile.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"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];

    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

    NSLog(returnString);

私のPHPファイルは次のようになります。

//echo basename($_FILES['userfile']['name']);
$uploaddir = '/api/uploads/';
$file = basename($_FILES['userfile']['name']);
$uploadfile = $uploaddir . $file;

echo $uploadfile."\n";
echo $file."\n";
echo $uploaddir."\n";
echo $_FILES["file"]["type"]."\n";
echo $_FILES["file"]["size"] / 1024;
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        echo "Uploaded";
}

しかし、XCodeで得られるリターンは

2013-02-10 13:23:09.116 Dablia[3419:907] /api/uploads/ipodfile.jpg
ipodfile.jpg
/api/uploads/

0
4

1 に答える 1

0

コンテンツタイプを変更してみてください。これを使用しています:

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

代わりにこれを試してください:

[body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

また

UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality);

ドキュメントから:

圧縮品質

結果の JPEG イメージの品質。0.0 から 1.0 の値で表されます。値 0.0 は最大の圧縮 (または最低の品質) を表し、値 1.0 は最小の圧縮 (または最高の品質) を表します。

私もこれに注意しました:

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

なぜあなたはこれをやっている?すでに NSData オブジェクト (imageData) を持っている

于 2013-02-10T14:00:56.887 に答える