从 iPhone 应用程序上传图像 [英] upload image from iPhone application
问题描述
我正在尝试从 iPhone 应用程序将图像上传到服务器
i am trying to upload a image to server from iPhone application
上传图片的PHP代码如下
PHP code for upload image is following
if(isset($_POST['insertImage']))
{ //INSERT IMAGE -------------------
$method=safeData($_POST['insertImage']);
if($method=='true')
{
if(isset($_POST['userId']))
{
if(isset($_FILES['imageFile']))
{
if($_FILES['imageFile']['type']=="image/gif" || $_FILES['imageFile']['type']=="image/bmp" || $_FILES['imageFile']['type']=='image/jpeg' || $_FILES['imageFile']['type']=='image/jpg' || $_FILES['imageFile']['type']=='image/png')
{
if($_FILES['imageFile']['size']<=5250000)
{
$userId=safeData($_POST['userId']);
$newImgName=rand()."a".time().".".findexts($_FILES["imageFile"]["name"]); imgPath="./../admin/images/";
move_uploaded_file($_FILES['imageFile']['tmp_name'],$imgPath.$newImgName);
$data.=saveImageInfo($userId,$newImgName);
}
else
{
$data.="<List><ResponseCode>405</ResponseCode><Message>Maximum image size should not be more than 5mb </List>";
}
}
else
{
$data.="<List><ResponseCode>405</ResponseCode><Message>Invalid image format. only png,jpg,bmp formats supported</Message></List>"; }
}
else
{
$data.="<List><ResponseCode>405</ResponseCode><Message>imageFile method not found</Message></List>";
}
}
else
{
$data.="<List><ResponseCode>405</ResponseCode><Message>userId method not found</Message></List>";
}
}
else
{
$data.="<List><ResponseCode>405</ResponseCode><Message>invalid insertImage argument</Message></List>";
}
}
我使用以下代码将图像上传到服务器
and I used following code to upload image to server
+(NSData *)setUserImage:(NSData *)userImageData UserId:(int)UserId
{
NSString *result;
NSData *responseData;
@try {
NSURL *url = [[NSURL alloc] initWithString:webAddress];
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url];
[req setHTTPMethod:@"POST"];
[req setValue:@"multipart/form-data; boundary=*****" forHTTPHeaderField:@"Content-Type"];//
NSMutableData *postBody = [NSMutableData data];
NSString *stringBoundary = [NSString stringWithString:@"*****"];
[postBody appendData:[[NSString stringWithFormat:@"--%@
",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name="insertImage"
"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"true"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"
--%@--
",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"--%@
",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name="userId"
"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"%d",UserId] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"
--%@--
",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"--%@
",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name="imageFile"; filename="myimagefile.png"
"] dataUsingEncoding:NSASCIIStringEncoding]];
//[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name="imageFile"; filename="myimagefile.png"
"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[NSData dataWithData:userImageData]];// dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"
--%@--
",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[req setHTTPBody: postBody];//putParams];
NSHTTPURLResponse* response = nil;
NSError* error = [[[NSError alloc] init] autorelease];
responseData = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error];
result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
if(isInDebugMode)
NSLog(@"Result: %@", result);
[url release];
[req release];
IceCreamManFinderAppDelegate *delegate1=(IceCreamManFinderAppDelegate *)[UIApplication sharedApplication].delegate;
if(error.domain!=nil)
{
NSString *errorDesc=[[error userInfo] objectForKey:@"NSLocalizedDescription"];
delegate1.globalErrorMessage=errorDesc;
return nil;
}
else
{
delegate1.globalErrorMessage=nil;
}
}
@catch (NSException* ex) {
NSLog(@"Error: %@",ex);
}
return responseData;
}
从上面的代码我得到服务器的以下响应
from above code i get following response from server
图片格式无效.仅限 png、jpg、bmp 格式
我尝试了很多但没有成功.
i tried lot but not success.
请指出我哪里错了?
推荐答案
您编写的服务器代码只接受具有某些指定内容类型的数据,但是您从未将内容类型添加到您的数据中.只需为您的图像数据发出正确的内容类型:
You wrote the server code to only accept data with certain specified content types, but then you never added the content type to your data. Simply emit the correct content type for your image data:
// Emit the content type here as well
[postBody appendData:[[NSString stringWithFormat:@"--%@
",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name="imageFile"; filename="myimagefile.png"
Content-Type: image/png
"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[NSData dataWithData:userImageData]];
[postBody appendData:[[NSString stringWithFormat:@"
--%@--
",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
错误实际上是从您自己的服务器响应中返回的,因此只需遵循服务器代码上的控制流即可找到原因.
The error is actually coming back from your own server response, so simply following the flow of control on your server code gives you the cause.
这篇关于从 iPhone 应用程序上传图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!