iPhone上传图片到PHP文件的奇怪行为

时间:2011-04-16 09:42:34

标签: php iphone

嘿伙计们,我一直在尝试将图片从我的iPhone应用程序上传到我的服务器,但没有具体的结果。我曾经做过,但现在似乎不再适用了。

我在iPhone上传图片的代码如下:

- (void) uploadPicture: (UIImageView *) newImage withParams: (NSString *) params{
//newImage.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString: @"http://farm3.static.flickr.com/2662/4149796861_80391f5364.jpg"]]];

NSData *imageData = UIImageJPEGRepresentation(newImage.image, 90);
NSString *urlString = [@"http://my.server/mobile_interface.php?" stringByAppendingString: params];

// setting up the request object now
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

/*
 add some header info now
 we always need a boundary when we post a file
 also we need to set the content type
 */
NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

/*
 now lets create the body of the post
 */
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]];
// setting the body of the post to the request
[request setHTTPBody:body];

// now lets make the connection to the web
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

NSLog(returnString);
[self setImageTaken: nil];
}

正如您所看到的,代码非常简单,我只是设置了一个连接,并使用POST来发送。我使用POST发布图像,同时附加参数,所以我使用GET来获取它们。

在PHP方面,代码如下:

if(isset($_GET["action"]) && $_GET["action"] == "upload_picture_new_user" && isset($_GET["user_id"])){
$uploaddir = '/my/path/';
echo $uploaddir;

$image = $_FILES['userfile']['name'];
$file = basename($_FILES['userfile']['name']);
//find extension of the file
$ext = findexts($file);

echo $file;
echo $ext;

$ran = rand (); 
$file = $ran;

$filename = $file .'.'. $ext;

echo $filename;

$uploadfile = $uploaddir . $file .'.'. $ext;
/*$filePrev = $file.'_prev';
$uploadprev = $uploaddir . $filePrev .'.'. $ext; */

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "uploaded_images/".$filename;
    $query = "INSERT INTO `my_table` (`profilepic`) VALUES ('uploaded_images/".$filename."')";
            //do the query
    do_query($query);
}
}

从这段代码中可以看出,我只需要取出FILES变量并取出扩展名,然后上传文件。

我的问题是没有上传任何内容,而且当我执行“NSLog(returnString);”时,整个代码中的回显不会打印在我的iPhone模拟器的控制台中。

你们中的任何人都可以得到错误的位置吗?我相信这是一个愚蠢的错误,但你知道,当看到相同的代码超过一个小时,那么一切似乎都是正确的,即使错误在你眼前,你也会感到沮丧。

非常感谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。它不在我显示的这段代码中,但实际上是在文件开头完成的检查,它只是阻止了某种类型的POST和GET操作。这当然不是由我完成的,这就是我为什么如此努力的原因。无论如何,感谢所有试图解决我的问题的人。