无法在iPhone应用程序中使用Base64上传图片

时间:2011-11-08 08:04:01

标签: iphone upload base64

我之前在这个论坛上问这个,但它已经关闭我不知道为什么,所以我再次发布我的问题。 在iPhone应用程序中我必须使用Base64编码上传图片,但当我在服务器中查看图片全白(大小= 0x0,54 KO),我确定我的图片的Base64编码是正确的,因为我有一个PHP脚本,我使用它,图片正常显示。 这是用于上传的PHP代码:

<?php
$filename = "photo_to_upload.jpg";
$handle = fopen($filename, "r");
$imgbinary = fread($handle, filesize($filename));
$data = base64_encode($imgbinary);
fclose($handle);
?>
<img src="./<?php echo $filename ?>" />
<form action="http://host" method="POST">
<input type="hidden" name="data" value="<?php echo $data?>">
<input type="submit" value="envoyer" />
</form>

和Xcode我用它:

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"photo_to_upload" ofType:@"jpg"];
 NSURL *url = [NSURL fileURLWithPath:filePath]; 
 NSData *imageData = [NSData dataWithContentsOfURL:url];

 NSURLResponse* response;
 NSError* error=nil;

NSMutableData *postData=[[NSMutableData alloc]init];
[postData appendData:[@"data=" dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[self base64forData:imageData]];


NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL   URLWithString:@"HOST"]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];

[[NSURLConnection alloc] initWithRequest:request delegate:self];    

请你帮忙。

2 个答案:

答案 0 :(得分:5)

我也面临同样的问题 Red Mak 答案帮助了我。

帮助解答

解决了!!!实际上问题是服务器编码请求用“+”替换blanc,之后解码用blanc替换“+”,但在Base64中我们分配了“+”,第一步服务器什么都不做(没有blanc查找)但是在seconde中它替换了“+”并且给出了错误的base64代码,

to solve that i replac "+" with ASCII equivalente like this 

:[[self base64forData:imageData]stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"].

答案 1 :(得分:0)

我认为您的postLength可能是错误的(您没有显示它是如何计算的以及它是什么类型)。这样做:

[request
    setValue:[NSString stringWithFormat:@"%u", [postData length]] 
    forHTTPHeaderField:@"Content-Length"
];