2013-08-02 38 views
1

这让我挠了一段时间。NSData appendData:UIImageJPEGRepresentation()返回零

我正在准备UIImage作为HTTP request的一部分发布。我用下面的代码这样做:

[postData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
         [postData appendData:[[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"q%@\"; filename=\".jpg\"\r\n" , key] dataUsingEncoding:NSUTF8StringEncoding]]; 
         [postData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
         [postData appendData:[NSData dataWithData:UIImageJPEGRepresentation(image, 1.0)]]; 
         [postData appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

我遇到的问题是,postDatanull运行这些行之后。使用NSLog我发现[postData appendData:[NSData dataWithData:UIImageJPEGRepresentation(image, 1.0)]];是导致这种情况发生的线。然后我继续看看图像是否是问题。 UIImageJPEGRepresentation(image, 1.0)将大量数据输出到控制台,并将图像添加到UIImageView显示我期待的.jpg。

我完全被诅咒了。请帮助>。 < 小号

编辑

略低于我一个崩溃之后已经意识到,它肯定张贴图片 。

NSLog(@"postData = %@",[postData length]); 

显示280861(字节?),但<?php print_r($_FILES); ?>返回数组{}的PHP文件。

+0

你如何创建'postData'实例? – Wain

+0

NSString * jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; NSString * post = [NSString stringWithFormat:@“&json =%@”,jsonString]; NSMutableData * postData = [NSMutableData dataWithData:[post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO]]; UIImage * image = xxxxx –

+0

刚注意到那是ASCII和其余的UTF8。我改变了这个,没有改进 –

回答

1

解决了与:

[postData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\";\r\nfilename=\"%@.jpeg\"\r\nContent-Type: image/jpeg\r\n\r\n", key,key] dataUsingEncoding:NSUTF8StringEncoding]]; 
[postData appendData:[NSData dataWithData:imageData]]; 
[postData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

后我已经包含数据的第一个换行符似乎已经解决了这个

1
  1. UIImageJPEGRepresentation(image, 1.0)返回无法转换为NSString的NSData对象。一个jpeg不包含有效的字符。并且任意数据不能转换为有效的字符串。

  2. 即使UIImageJPEGRepresentation(image, 1.0)返回nil,[NSData dataWithData:]调用也会确保您附加到postData的数据不为零。 [NSData dataWithData:nil];返回一个空的NSData实例,而不是零。

  3. 关于你的答案。 nil不是有效的字符串编码。编译器应该显示一个警告,你应该在控制台中看到一条警告:“检测到错误的NSStringEncoding值0x0000,假设NSASCIIStringEncoding,在不久的将来会停止这种兼容性映射行为。”

您不能将postData转换回NSString。如果你想检查图像是NSData对象的一部分,你可以看看postData的长度。

+0

好的谢谢你的澄清,但是我仍然遇到了这个脚本的问题,我有一个PHP脚本, ?php print_r($ _ FILES)?>'返回一个空数组,这意味着数据仍然没有被正确发布,我将在OP中发布完整的代码 –

0

你怎么告诉postData为空?请注意,您无法使用以下类别/扩展名将其转换为UTF8字符串。

extension NSData { func to_string(encoding:UInt = NSUTF8StringEncoding) -> String? { return NSString(data:self, encoding:encoding) as? String } }